Apache Kafka - WorkFlow
A partir de ahora, discutimos los conceptos centrales de Kafka. Ahora arrojemos algo de luz sobre el flujo de trabajo de Kafka.
Kafka es simplemente una colección de temas divididos en una o más particiones. Una partición de Kafka es una secuencia de mensajes ordenada linealmente, donde cada mensaje se identifica por su índice (llamado desplazamiento). Todos los datos de un clúster de Kafka son la unión inconexa de particiones. Los mensajes entrantes se escriben al final de una partición y los consumidores los leen secuencialmente. La durabilidad se proporciona replicando mensajes a diferentes agentes.
Kafka proporciona un sistema de mensajería pub-sub y basado en colas de una manera rápida, confiable, persistente, con tolerancia a fallas y sin tiempo de inactividad. En ambos casos, los productores simplemente envían el mensaje a un tema y el consumidor puede elegir cualquier tipo de sistema de mensajería en función de su necesidad. Sigamos los pasos de la siguiente sección para comprender cómo el consumidor puede elegir el sistema de mensajería de su elección.
Flujo de trabajo de mensajería Pub-Sub
A continuación se muestra el flujo de trabajo paso a paso de la mensajería Pub-Sub:
Los productores envían mensajes a un tema a intervalos regulares.
El agente de Kafka almacena todos los mensajes en las particiones configuradas para ese tema en particular. Garantiza que los mensajes se compartan por igual entre las particiones. Si el productor envía dos mensajes y hay dos particiones, Kafka almacenará un mensaje en la primera partición y el segundo mensaje en la segunda partición.
El consumidor se suscribe a un tema específico.
Una vez que el consumidor se suscribe a un tema, Kafka proporcionará el desplazamiento actual del tema al consumidor y también guardará el desplazamiento en el conjunto Zookeeper.
El consumidor solicitará el Kafka en un intervalo regular (como 100 Ms) para nuevos mensajes.
Una vez que Kafka recibe los mensajes de los productores, los reenvía a los consumidores.
El consumidor recibirá el mensaje y lo procesará.
Una vez que se procesan los mensajes, el consumidor enviará un acuse de recibo al corredor de Kafka.
Una vez que Kafka recibe un acuse de recibo, cambia el desplazamiento al nuevo valor y lo actualiza en Zookeeper. Dado que las compensaciones se mantienen en el Zookeeper, el consumidor puede leer correctamente el siguiente mensaje incluso durante los ataques del servidor.
Este flujo anterior se repetirá hasta que el consumidor detenga la solicitud.
El consumidor tiene la opción de retroceder / saltar al desplazamiento deseado de un tema en cualquier momento y leer todos los mensajes posteriores.
Flujo de trabajo de mensajes en cola / grupo de consumidores
En un sistema de mensajería en cola en lugar de un solo consumidor, un grupo de consumidores que tengan el mismo ID de grupo
se suscribirá a un tema. En términos simples, los consumidores que se suscriben a un tema con el mismo ID de grupo
se consideran un solo grupo y los mensajes se comparten entre ellos. Comprobemos el flujo de trabajo real de este sistema.
Los productores envían mensajes a un tema en intervalos regulares.
Kafka almacena todos los mensajes en las particiones configuradas para ese tema en particular, similar al escenario anterior.
Un solo consumidor se suscribe a un tema específico, asuma el
Tema-01
conID de
grupo
comoGrupo-1
.Kafka interactúa con el consumidor de la misma manera que Pub-Sub Messaging hasta que un nuevo consumidor se suscribe al mismo tema,
Topic-01
con el mismoID de
grupo
queGroup-1
.Una vez que llega el nuevo consumidor, Kafka cambia su funcionamiento al modo de compartir y comparte los datos entre los dos consumidores. Este intercambio continuará hasta que el número de consumidores alcance el número de particiones configuradas para ese tema en particular.
Una vez que el número de consumidores excede el número de particiones, el nuevo consumidor no recibirá más mensajes hasta que alguno de los consumidores existentes se dé de baja. Este escenario surge porque a cada consumidor en Kafka se le asignará un mínimo de una partición y una vez que todas las particiones se asignen a los consumidores existentes, los nuevos consumidores tendrán que esperar.
Esta función también se denomina
Grupo de consumidores
. De la misma manera, Kafka proporcionará lo mejor de ambos sistemas de una manera muy simple y eficiente.
Papel de ZooKeeper
Una dependencia crítica de Apache Kafka es Apache Zookeeper, que es un servicio distribuido de configuración y sincronización. Zookeeper sirve como interfaz de coordinación entre los corredores de Kafka y los consumidores. Los servidores de Kafka comparten información a través de un clúster de Zookeeper. Kafka almacena metadatos básicos en Zookeeper, como información sobre temas, corredores, compensaciones de consumidores (lectores de cola), etc.
Dado que toda la información crítica se almacena en el Zookeeper y normalmente replica estos datos en todo su conjunto, la falla del corredor / Zookeeper de Kafka no afecta el estado del clúster de Kafka. Kafka restaurará el estado una vez que se reinicie Zookeeper. Esto le da cero tiempo de inactividad a Kafka. La elección de líder entre el corredor de Kafka también se realiza utilizando Zookeeper en caso de falla del líder.
Para obtener más información sobre Zookeeper, consulte zookeeper.
Continuemos más sobre cómo instalar Java, ZooKeeper y Kafka en su máquina en el próximo capítulo.