Kafka en una Arquitectura de Microservicios


En esta entrada vamos a hablar sobre como utilizar kafka, no Franz Kafka el escritor Bohemio, sino la herramienta de Apache en Microservicios, y como de útil e importante puede llegar a ser para construir una buena arquitectura de Microservicios.

Tal y como ya hablamos en una entrada anterior uno de los patrones más extendidos e implementados cuando se trabaja con Microservicios es hacer uso del Event-driven programming. Esté es un paradigma basado en eventos, es decir, hay un bucle que esta escuchando si llega alguna acción y en ese momento realizar un procesamiento en función de esa acción. Se podría resumir como que un sistema envía eventos o mensajes a otro sistema dentro del mismo dominio (contexto de negocio).

El objetivo de usar este tipo de arquitecturas, es también lograr asincronía total, es decir que ninguna llamada sea HTTP síncrona, en la que se este esperando la respuesta.

¿Cómo funciona Kafka?

Kafka es un sistema de mensajería duradero basado en publicación y suscripción que intercambia datos entre procesos, aplicaciones y servidores. Es un sistema distribuido y horizontalmente escalable.

Su funcionamiento es similar al de cualquier sistema de mensajería. Por un lado tenemos los Productores que envía un mensaje a un nodo de Kafka (broker); y por otro lado dicho mensaje es procesado por otra aplicación que es la consumidora. Estos mensajes

Los mensajes son almacenado en un topic al que el consumidor esta suscrito y puede escuchar esos mensajes.

Kafka consumidor y productor
Kafka:Consumidor y productor

Una de las mayores ventajas que nos aporta Kafka es su velocidad, pero no se va a encargar de validar los mensajes. Por lo que si el Productor envía el mensaje en un formato y el consumidor espera un formato diferente habrá problemas de compatibilidad.

Para evitar los problemas de compatibilidad entre el mensaje que envía el productor y recibe el consumidor, podemos hacer uso del Schema Registry. Esté es un almacén de Schemas en el que se guarda el formato del mensaje a enviar. De esta manera el mensaje puede ser validado y lanzar un error en el caso en el que el formato no sea el esperado.

Event Driven con Kafka

Para el uso del patrón Event Driven se requiere de un consumidor y un productor. Los cuales se comunicaran a través de mensajes, haciendo uso, por ejemplo, de Kafka.

En este Patrón de Arquitectura un mensaje será enviado cuando suceda un cambio de estado. Y el consumidor que se encuentra suscrito a ese topic recibirá y procesará el mensaje.

Vamos a explicar este punto con un sencillo ejemplo, vamos a crear un sistema bancario en el que tenemos dos Microservicios, el primero de ellos contiene el saldo del usuario y el segundo Microservicio es el funcionamiento de su tarjeta de crédito.

Cada vez que el usuario realiza un pago con tarjeta, el microservicio que se encarga de la gestión de la tarjeta producirá un mensaje que de manera asíncrona llegará a un topic de kafka, y el microservicio consumidor que se encarga del saldo, será el encargado de consumir ese mensaje y descontar el saldo.

Este es un ejemplo muy básico y muy sencillo de utilización de kafka, ya que habría que tener en cuenta más parámetros, como si tiene o no saldo, o que lleguen mensajes seguidos y tengamos que compensar lo cobrado porque no se pueda realizar el pago etc, pero no es objeto de estudio en esta entrada. Estos temas los trataremos en próximas entrada, con el patrón Saga.

Conclusión.

En esta entrada hemos visto como podemos utilizar kafka en una arquitectura de microservicios haciendo uso del patrón Event Driven.

Si quieres ver un ejemplo, por ejemplo haciendo uso de Quarkus puedes echar un vistazo aquí. En el que se implementa el patrón Saga.

Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!


4 pensamientos sobre “Kafka en una Arquitectura de Microservicios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *