Visualizando a Kafka

Visualizando a Kafka

@programacion

Kafka es un software de transmisión de eventos de código abierto que le permite crear sistemas controlados por eventos. Si bien hay otras guías al respecto, me gustaría centrarme en visualizar los conceptos principales detrás de Kafka. De esa manera, cuando lea las otras guías, se sentirá mucho más seguro.

Con eso, ¡comencemos!

Lo esencial

Antes de comenzar, asegurémonos de estar en la misma página sobre Kafka. Es un software de transmisión de eventos. Permite que los servicios de backend (generalmente en la arquitectura de microservicios) se comuniquen entre sí.

Productores y consumidores

Los productores y los consumidores son servicios que escuchan o envían mensajes en Kafka. Estos servicios son sus servicios de backend.

Un servicio puede ser tanto un consumidor y productor.

Topic

Los topics son direcciones a las que los productores pueden enviar mensajes. Otros servicios pueden escuchar estos topics.

Un servicio que emite un mensaje y un servicio que recibe un mensaje de un tema de Kafka

Un servicio puede escuchar y enviar mensajes a tantos temas como desee.

También existe la noción de un grupo de consumidores. Este es un grupo de servicios que actúa como un solo consumidor.

Un grupo de consumidores que escucha el tema B

Para cualquier mensaje que vaya a un grupo de consumidores, Kafka enruta ese mensaje a un único servicio. Esto le ayuda a equilibrar la carga de los mensajes. ¡Y escala a los consumidores!

Un mensaje que va a un solo servicio con un grupo de consumidores.

Un tema o topic actúa como una cola de mensajes. Repasemos esto. Primero, se envía un mensaje.

Productor enviando mensaje al tema de Kafka.

Luego, el mensaje se graba y se almacena en esta cola. Este mensaje no se puede modificar.

El mensaje se almacena en la cola

El mensaje también se envía a cualquier consumidor del tema. Sin embargo, el mensaje permanece en la cola de forma permanente y no se puede editar.

Una copia del mensaje que se almacena en la cola y se envía al consumidor.

Enviemos otro mensaje. Solo para recalcar el punto.

Envío de un segundo mensaje al tema A

Como antes, este mensaje se enviará al consumidor y se almacenará en la cola. No puede cambiar los mensajes y se almacenan de forma permanente .

(Nota: puede configurar los temas de Kafka para eliminar estos mensajes si hay demasiados o después de un período de tiempo)

Se almacena el segundo mensaje.

Esto sucede para todos los temas de nuestro clúster de Kafka.

Mensajes en cola en temas

Estas colas inmutables nos permiten almacenar mensajes de forma asincrónica independientemente de si un productor o consumidor deja de funcionar. También garantiza la exactitud de los mensajes (no están manipulados).

Abramos estos temas de Kafka y echemos un vistazo al interior.

Particiones

Mentí. Un tema de Kafka no es realmente una sola cola, ¡sino que en realidad está compuesto por muchas colas llamadas particiones! Ayudan a escalar un tema o topic.

Un tema con dos particiones

Cuando un productor publica sobre un tema, ese mensaje se envía a una sola partición.

Un mensaje que ingresa a un tema, va a una partición

Un consumidor escucha todas las particiones y consume eventos de todas.

Un mensaje que se consume desde una partición

Un productor de forma predeterminada enviará mensajes al tema. El tema determinará a qué partición irá el mensaje. De forma predeterminada, los mensajes se asignarán a las particiones mediante una estrategia de operación por turnos.

Un productor que escribe sobre un tema, que está escribiendo en varias particiones.

Puede configurar temas (no el servicio) para dividir los mensajes en diferentes particiones. Por ejemplo, si está manejando mensajes de usuario (y tiene una identificación de usuario), puede asegurarse de que los mensajes de ese usuario permanezcan dentro de la misma partición. Puede hacer esto mediante el hash de la identificación del usuario y luego modificándolo por el número de particiones. Tú entiendes. Ojala.

Un productor que envía mensajes (con identificaciones de entidad / usuario posiblemente diferentes) a diferentes particiones

Por qué querrías esto? Es porque se garantiza que cada mensaje dentro de una partición estará ordenado cronológicamente. Por lo tanto consumido en orden.

Los mensajes se consumen en orden desde las particiones.

Cada mensaje que entra en esa partición se ordena dentro de esa partición. Incluso con mensajes de varios usuarios (u otra entidad) asignados a la misma partición (rojo / verde). Todavía recibe mensajes de usuario ordenados para cada uno.

Independientemente de por qué se asignan diferentes tipos de mensajes en particiones individuales, mantienen el orden

Se ordenarán los mensajes provenientes de una partición. Pero las particiones pueden enviar sus mensajes en cualquier momento. Por lo tanto, los temas no garantizan el orden. Esto es un poco raro. Sé. A continuación, observe cómo ambas particiones envían sus propios mensajes. Pero lo hacen independientemente de la otra partición. Todavía mantienen su propio orden de mensajes.

Dos escenarios perfectamente válidos. Cada partición mantiene el orden de sus propios mensajes.

Si sus consumidores dependen del orden de los mensajes (seguimiento de los clics de los usuarios dentro de su sitio), querrá investigar más estas estrategias de partición de temas (que están fuera del alcance de este artículo). De lo contrario, la estrategia predeterminada funcionará bien para usted.

Ahora alejemos un poco la imagen y entendamos cómo lo hace Kafka.

Infraestructura

Si damos un paso atrás, veamos nuestro primer gráfico. ¿Qué es la nube de Kafka?

Dos servicios que se comunican a través de Kafka

En realidad, es un grupo de servidores. El primero que veremos es el jefe del grupo kafka, guardián del Zookeeper.

Zookeeper enruta el tráfico de entrada y salida del clúster de Kafka.

Zookeeper gestiona todos sus temas y particiones. Básicamente, mantiene un conjunto de nodos de clúster de Kafka donde se almacenan los temas y las particiones. Estos nodos son máquinas individuales (por ejemplo, instancias EC2) que forman su clúster de Kafka.

Zookeeper manteniendo un conjunto de nodos

Si tenemos dos temas, con dos particiones cada uno, así es como es posible que los hayamos visualizado antes. Tenga en cuenta que ahora las particiones tienen el mismo color que el tema.

Dos temas con dos particiones

Numeraremos las particiones para ayudar a identificarlas más tarde.

Particiones numeradas

Ahora, veamos cómo encajarían estos temas en nuestro clúster de Kafka. Comencemos con un tema. Un tema o topic. Para este ejemplo, su Partición #1 se colocará en cada nodo.

Tema A, partición n.° 1

No es necesario que coloque particiones en todos los nodos. Y probablemente no quieras. Se volverá un poco caro. Por otro lado, tendrás sistemas resistentes. Veamos por qué.

Si llega un mensaje, se enrutará a una partición en uno de los nodos, conocido como líder. El cuidador del Zookeeper asigna al líder.

Un mensaje enviado al líder.

Zookeeper enviará el mensaje al consumidor como antes. También duplicará el mensaje a las otras copias de la partición. Seguidores.

Enviar el mensaje al consumidor y duplicarlo en todos los seguidores.

¡Ahora, cada copia de la partición contiene nuestro mensaje! Si un nodo cae o explota, Zookeeper reasignará el líder a un nodo diferente.

Mensaje en cada copia de la partición

Este es el mismo proceso que sucederá para cada una de las otras particiones que agreguemos. Sin embargo, mantendremos dos copias de la partición en nuestro clúster por ahora.

Ahora agreguemos la otra partición #2 para el tema A. Solo dos copias de ella también. ¡Ahora, el tema A está completamente en nuestro grupo! Ambas particiones se copian y mantienen.

Partición n.°1 y n.°2 en nuestro clúster.

Ahora, agreguemos las particiones para el tema B. Asumiremos dos copias por ahora. ¡Este es nuestro clúster de Kafka con ambos temas! ¡Terminamos!

Ambos grupos

Puede ser útil comparar lo que teníamos antes. Observe cómo se distribuyen los temas en el grupo.

Lo que teníamos antes.
¡Lo que tenemos ahora!

Conclusión

Espero que ahora comprenda mejor a Kafka. Espero que estas visualizaciones te hayan ayudado a determinar qué preguntas hacer y qué buscar en Google. Hay guías increíbles sobre cada uno de los principios de este artículo.

Fuente:
https://timothystepro.medium.com/visualizing-kafka-20bc384803e7

Report Page