El objetivo de este artículo es brindarle una descripción general muy rápida de cómo Kafka se relaciona con las colas y por qué consideraría usarlo en su lugar.
Kafka es una pieza de tecnología desarrollada originalmente por la gente de Linkedin. En pocas palabras, es como un sistema de cola de mensajes con algunos cambios que le permiten admitir publicación/suscripción, escalamiento horizontal en muchos servidores y reproducción de mensajes.
Todas estas son preocupaciones cuando desea adoptar un estilo de programación reactivo en lugar de un estilo de programación imperativo .
La programación imperativa es el tipo de programación con la que todos comenzamos. Algo sucede, en otras palabras, ocurre un evento y su código recibe una notificación de ese evento. Por ejemplo, un usuario hizo clic en un botón y cuando usted maneja el evento en su código, usted decide lo que esa acción debería significar para su sistema. Puede guardar registros en una base de datos, llamar a otro servicio, enviar un correo electrónico o una combinación de todos estos. Lo importante aquí es que el evento está directamente relacionado con acciones específicas que tienen lugar.
La programación reactiva le permite responder a los eventos que ocurren, a menudo en forma de secuencias. Múltiples preocupaciones pueden suscribirse al mismo evento y dejar que el evento tenga su efecto en su dominio, independientemente de lo que suceda en otros dominios. En otras palabras, permite un código débilmente acoplado que se puede ampliar fácilmente con más funciones. Es posible que varios grandes sistemas de flujo descendente codificados en diferentes pilas se vean afectados por un evento, o incluso por un montón de funciones sin servidor que se ejecutan en algún lugar de la nube.
Para comprender qué aportará Kafka a su arquitectura, comencemos hablando de las colas de mensajes. Comenzaremos aquí, porque hablaremos sobre sus limitaciones y luego veremos cómo las resuelve Kafka.
Una cola de mensajes permite que un grupo de suscriptores extraiga un mensaje, o un lote de mensajes, desde el final de la cola. Las colas generalmente permiten cierto nivel de transacción al extraer un mensaje, para garantizar que se ejecutó la acción deseada, antes de que se elimine el mensaje.
No todos los sistemas de colas tienen la misma funcionalidad, pero una vez que se ha procesado un mensaje, se elimina de la cola. Si lo piensa, es muy similar a la programación imperativa, algo sucedió y el sistema de origen decidió que cierta acción debería ocurrir en un sistema posterior.
Aunque puede escalar horizontalmente con varios consumidores en la cola, todos contendrán la misma funcionalidad, y esto se hace solo para manejar la carga y procesar mensajes en paralelo, en otras palabras, no le permite iniciar varios consumidores independientes. acciones basadas en el mismo evento. Todos los procesadores de los mensajes de la cola ejecutarán el mismo tipo de lógica en el mismo dominio. Esto significa que los mensajes en la cola son en realidad comandos, que se adaptan a la programación imperativa, y no un evento, que se adapta a la programación reactiva.
Con las colas, generalmente ejecuta la misma lógica en el mismo dominio para cada mensaje en la cola.
Con Kafka, por otro lado, publicas mensajes/eventos en temas y se conservan. No se eliminan cuando los consumidores los reciben. Esto le permite reproducir mensajes, pero lo que es más importante, permite que una multitud de consumidores procese la lógica en función de los mismos mensajes/eventos.
Todavía puede escalar horizontalmente para obtener un procesamiento paralelo en el mismo dominio, pero lo que es más importante, puede agregar diferentes tipos de consumidores que ejecutan una lógica diferente en función del mismo evento. En otras palabras, con Kafka, puede adoptar una arquitectura pub/sub reactiva.
Diferentes sistemas pueden ejecutar diferentes lógicas basadas en los mismos eventos.
Esto es posible con Kafka debido al hecho de que los mensajes se retienen y al concepto de grupos de consumidores. Los grupos de consumidores en Kafka se identifican ante Kafka cuando solicitan mensajes sobre un tema. Kafka registrará qué mensajes (compensación) se entregaron a qué grupo de consumidores, para que no vuelva a enviarlos. En realidad, es un poco más complejo que eso, porque tiene un montón de opciones de configuración disponibles para controlar esto, pero no necesitamos explorar las opciones completamente solo para comprender Kafka a un alto nivel.
Hay mucho más en Kafka , por ejemplo, cómo gestiona el escalado horizontal (particiones), las opciones de configuración para mensajes confiables, etc. viejas colas de mensajes.