Una breve introducción a los principios básicos y al flujo de trabajo de Kafka.
Flujo de trabajo de Kafka
Resumen básico:
1) Broker: Broker representa el nodo de Kafka. El Broker es una implementación distribuida y es independiente entre sí. al iniciar, habrá un nodo en Zookeeper específicamente para registrar la lista de servidores Broker: /brokers/ids. Cuando se inicia cada Broker, se registrará con Zookeeper, es decir, creará su propio nodo en /brokers/ids, como /brokers/ids/[0...N]. Kafka usa un número único global para referirse a cada servidor de Broker. Los diferentes Broker deben usar diferentes ID de Broker para registrarse. Una vez creado el nodo, cada Broker registrará su dirección IP y la información del puerto en el nodo. Entre ellos, el tipo de nodo creado por el Broker es un nodo temporal. Una vez que el Broker deja de funcionar, el nodo temporal correspondiente también se eliminará automáticamente.
2) Tema: Tema de mensaje En Kafka, los mensajes del mismo tema se dividirán en múltiples particiones y se distribuirán en múltiples Brokers. Esta información de partición y las relaciones correspondientes con los Brokers también son mantenidas por Zookeeper y. registrado por nodos especiales, como: /brokers/topics Cada tema en Kafka se registrará en el formato /brokers/topics/[tema], como /brokers/topics/login y /brokers/topics/search, etc. Una vez iniciado el servidor Broker, registrará su ID de Broker en el nodo de Tema correspondiente (/brokers/topics) y escribirá el número total de particiones para el Tema, como /brokers/topics/login/3->2. El nodo representa la ID del Broker. Un servidor Broker de 3 proporciona 2 particiones para el almacenamiento de mensajes del tema "iniciar sesión". De manera similar, este nodo de partición también es un nodo temporal.
3) partición: partición del mismo tipo de mensaje de tema, como se muestra en la figura. Cada partición tiene un líder y N seguidores (réplicas). El número de réplicas se puede especificar al crear el tema. La producción de mensajes por parte de los productores de mensajes y el consumo de mensajes por parte de los grupos de consumidores se completan a través del líder. La existencia de réplicas es para evitar el tiempo de inactividad del nodo, lo que hace que el líder cuelgue. El seguidor puede convertirse en líder en cualquier momento y continuar. para reanudar la producción. Aquí está el punto clave: si el nodo donde se encuentra el líder está inactivo, un seguidor se convertirá en el líder. Por lo tanto, el líder y el seguidor de la misma partición del mismo tema no pueden estar en el mismo corredor. Se logrará cierto tema de un determinado tema en este corredor. Si el líder de una partición falla, los seguidores de esta partición en este tema en otros nodos normales aparecerán.
4) Equilibrio de carga de los mensajes enviados por los productores: dado que el mismo mensaje de tema se dividirá y distribuirá en varios corredores, el productor debe enviar los mensajes de manera razonable a estos distribuidos en el corredor, cómo lograr la carga. ¿Equilibrio de productores? Kafka admite el equilibrio de carga tradicional de cuatro capas y también admite el método Zookeeper para lograr el equilibrio de carga. (4.1) El equilibrio de carga de cuatro capas determina un corredor asociado en función de la dirección IP y el puerto del productor. Por lo general, un productor solo corresponde a un único Broker, y luego los mensajes generados por el productor se envían al Broker. La lógica de este método es simple: cada productor no necesita establecer conexiones TCP adicionales con otros sistemas. Solo necesita mantener una única conexión TCP con el Broker.
Sin embargo, no puede lograr un verdadero equilibrio de carga, porque la cantidad de mensajes generados por cada productor en el sistema real y la cantidad de almacenamiento de mensajes de cada Broker son diferentes. Si algunos productores generan muchos más mensajes que otros, si es así, el número total de. Los mensajes recibidos por diferentes Brokers variarán mucho. Al mismo tiempo, los productores no podrán percibir la adición y eliminación de Brokers en tiempo real. (4.2) Utilice Zookeeper para equilibrar la carga. Dado que cada Broker completará el proceso de registro del Broker cuando se inicie, el productor percibirá dinámicamente los cambios en la lista de servidores del Broker a través de cambios en el nodo, de modo que se pueda implementar un mecanismo de equilibrio de carga dinámico. .
5) Equilibrio de carga del consumidor: al igual que los productores, los consumidores en Kafka también necesitan equilibrio de carga para lograr que varios consumidores reciban mensajes razonablemente del servidor Broker correspondiente. Cada grupo de consumidores Un grupo contiene varios consumidores y cada mensaje. solo se enviará a un consumidor del grupo. Diferentes grupos de consumidores consumen mensajes bajo sus propios temas específicos sin interferir entre sí.
6) La relación entre particiones y consumidores: ¿Grupo de consumidores? ¿Hay varios consumidores en el grupo de consumidores? Para cada grupo de consumidores (Grupo de consumidores), Kafka le asigna una ID de grupo única a nivel mundial, y todos los consumidores dentro del grupo comparten esta ID. Cada partición del tema suscrito solo se puede asignar a un consumidor de un determinado grupo (por supuesto, la partición también se puede asignar a otros grupos). Al mismo tiempo, Kafka asigna un ID de consumidor a cada consumidor, generalmente expresado en forma de "Nombre de host: UUID". En Kafka, se estipula que cada partición de mensajes solo puede ser consumida por un consumidor del mismo grupo. Por lo tanto, la relación entre la partición de mensajes y el consumidor debe registrarse en Zookeeper una vez que cada consumidor determina la necesidad de una partición de mensajes. Para consumir energía, debe escribir su ID de consumidor en el nodo temporal correspondiente a la partición de mensajes en Zookeeper, por ejemplo: /consumers/[group_id]/owners/[topic]/[broker_id-partition_id] Entre ellos, ¿[broker_id]? -partition_id] es el identificador de la partición del mensaje. El contenido del nodo es el ID del consumidor en la partición del mensaje.
7) Grabación de compensación del progreso del consumo de mensajes: en el proceso en el que el consumidor consume mensajes para la partición de mensajes especificada, la compensación del progreso del consumo del mensaje de la partición debe registrarse en Zookeeper con regularidad para que el consumidor pueda después. Al reiniciar u otros consumidores se hacen cargo del consumo de mensajes de la partición de mensajes, el consumo de mensajes puede continuar desde el progreso anterior. El desplazamiento lo registra un nodo especial en Zookeeper y su ruta de nodo es:/consumers/[group_id]/offsets/[topic]/[broker_id-partition_id]. Esta es la forma en que se registran las compensaciones en Kafka 0.9 y versiones anteriores. En versiones posteriores, las compensaciones se almacenan localmente en Kafka. Por supuesto, local aquí se refiere al disco, no a la memoria. . .
8) Registro del consumidor: cuando se inicia cada servidor del consumidor, creará su propio nodo de consumidor en el nodo designado de Zookeeper, como /consumers/[group_id]/ids/[consumer_id], después de completar el Al crear el nodo, el consumidor escribirá la información del tema al que se suscribió en el nodo temporal. Regístrese y escuche los cambios en los consumidores en los grupos de consumidores.
Cada consumidor debe prestar atención a los cambios en otros servidores de consumidores en el grupo de consumidores al que pertenece, es decir, el Vigilante monitorea los cambios en los nodos secundarios registrados en el nodo /consumers/[group_id]/ids Una vez nuevo o. Si se encuentra un consumidor reducido, se activará el equilibrio de carga del consumidor. Regístrese y escuche los cambios en el servidor Broker. Los consumidores deben monitorear los nodos en /broker/ids/[0-N]. Si se descubre que la lista de servidores del Broker ha cambiado, se decidirá en función de la situación específica si se requiere equilibrio de carga del consumidor. Realizar el equilibrio de carga del consumidor. Para permitir que varios consumidores consuman mensajes en diferentes particiones bajo el mismo tema de la manera más uniforme posible, el proceso de asignación de consumidores y particiones de mensajes se realiza generalmente para un grupo de consumidores, si el servidor del consumidor en el grupo cambia o. el servidor Broker Cuando se produzcan cambios, se emitirá el equilibrio de carga del consumidor.