kafka

Apache Kafka (Kafka para abreviar) era originalmente un sistema de mensajería distribuida de código abierto de Linkedln. Ahora es un subproyecto de Apache y se ha convertido en el sistema de mensajería más utilizado en la comunidad Kafka. También es muy activo a partir de la versión, el lema de Kafka se ha cambiado de "un sistema de mensajería distribuida de alto rendimiento" a "una plataforma de transmisión distribuida"

En cuanto a Kafka, planeo comenzar con los primeros pasos. Desde el principio hasta los principios lógicos de implementación subyacentes y el código fuente, le sugiero que tenga paciencia y lo lea desde el principio. Creo que obtendrá algo.

Como plataforma de streaming de datos, lo más importante es contar con las siguientes características

Sistema de mensajes:

El sistema de mensajes (también llamado cola de mensajes) principalmente incluye: Dos modelos de mensajes: cola y suscripción de publicación. Kafka usa grupos de consumidores para combinar los dos modelos de mensajes anteriores. Cuando Kafka usa el modelo de cola, puede distribuir uniformemente el procesamiento a los miembros de consumidores en el grupo de consumidores. A continuación analizaremos varios conceptos básicos de Kafka desde esta perspectiva e intentaremos resolver los siguientes problemas

Después de que el productor publica el mensaje en el clúster fk, hay dos modelos de consumo en los que el mensaje será consumido por el consumidor: Modelo push (pu) y modelo pull (pull) Un sistema de mensajes basado en el modelo push. El agente de mensajes registra el estado de consumo del consumidor. Después de enviar el mensaje al consumidor, el agente de mensajes marca el mensaje. como consumido

Pero este método no puede garantizar bien la semántica de procesamiento del mensaje. Por ejemplo, después de que el agente de mensajes envía el mensaje, cuando el proceso del consumidor cuelga o el mensaje no se recibe debido a razones de red. el mensaje puede perderse (porque el mensaje El agente ha marcado este mensaje para su propio consumo, pero en realidad este mensaje no se ha procesado realmente) Si desea garantizar la semántica de procesamiento del mensaje, después de que el agente de mensajes envíe el mensaje , debe establecer el estado en "enviado" solo cuando se recibe y se actualiza a "consumido" solo después de la solicitud de confirmación del consumidor, lo que requiere registrar el estado de consumo de todos los mensajes en el intermediario de mensajes. Este método tampoco es deseable. /p>

Múltiples particiones para cada tema de Kafka Los registros se almacenan de manera distribuida en el clúster de Kafka. Al mismo tiempo, para tolerancia a fallas, cada partición se copiará en múltiples nodos del intermediario de mensajes en forma de copias. de los nodos servirá como copia primaria (Líder) y su nodo servirá como copia de seguridad (Seguidor, también llamada copia esclava)

La copia maestra será responsable de todas las operaciones de lectura y escritura del cliente. La copia de seguridad solo sincroniza los datos de la copia maestra. Cuando la copia maestra IH falla ahora, la copia en la copia de seguridad se seleccionará como la nueva. Debido a que solo la copia primaria de cada partición acepta lectura y escritura, cada servidor lo hará. sirve como copia primaria de algunas particiones y copia de seguridad de otras particiones. De esta manera, todos los servidores en el clúster de Kafka serán responsables del equilibrio de carga del cliente en su conjunto. generalmente está compuesto por productores, productores, consumidores (co consumidor) y intermediarios de mensajes (rompidos). Los productores escribirán mensajes al intermediario de mensajes y los consumidores leerán los mensajes. Leyendo mensajes en el agente Para el agente de mensajes, ambos. los productores y consumidores pertenecen al cliente: los productores y consumidores enviarán las solicitudes del cliente al servidor, y el procesamiento del servidor es almacenar el mensaje y obtener el mensaje respectivamente, y finalmente el servidor devuelve los resultados de la respuesta al cliente

La nueva aplicación de productor utiliza el objeto aP oduce para representar un proceso de cliente de productor. El productor desea enviar mensajes, no directamente al servidor, sino primero al cliente. El mensaje se coloca en la cola y luego en un hilo de envío de mensajes. toma el mensaje de la cola y lo envía al servidor en forma de sal. El recopilador de Kafka (Reco dACCUl'lUlato) es responsable de almacenar en caché los mensajes generados por el cliente productor. El hilo de envío (Sende) es responsable de En orden. Para garantizar que las solicitudes de red de los clientes se respondan rápidamente, Kafka utiliza un selector (Selecto) para manejar la lectura y escritura de la conexión de red, y habilita la conexión de red (Netwo kCl i.ent) para procesar las solicitudes de red de los clientes p>

Cuándo. Al agregar mensajes al recopilador de registros, se agrupan según las particiones y se colocan en la colección de lotes. La cola de cada partición guarda los registros que se enviarán al nodo correspondiente de esta partición. El hilo de envío del cliente solo puede usar Se.

El hilo nde itera cada partición de los lotes, obtiene el nodo de script principal correspondiente a la partición y saca el registro del lote en la columna correspondiente a la partición para enviar el mensaje

El hilo de envío de mensajes tiene dos Métodos de envío de mensajes directamente según la partición. El nodo de destino se envía según la partición. Supongamos que hay dos servidores y el problema tiene una partición. Luego, cada servidor tiene una partición para enviar mensajes. mensajes al nodo de réplica principal de la partición. El número total es ** *Se mostrará una solicitud. Primero la agrupo según el nodo de réplica principal de la partición. Allí se juntan todas las particiones que pertenecen al mismo nodo. Hay solo dos solicitudes en total. Este enfoque puede reducir en gran medida la sobrecarga de la red.

El sistema de mensajes consta de un sistema de almacenamiento productor y un consumidor. Este capítulo analiza el proceso de envío de mensajes del productor al servidor. El capítulo analiza el proceso en el que el consumidor lee el mensaje escrito por el productor desde el sistema de almacenamiento del servidor. Primero, permítame comprender al consumidor. Algunos conocimientos básicos Como sistema de mensajería distribuida, Kafka admite múltiples productores. Los consumidores pueden publicar mensajes en diferentes particiones en diferentes nodos del clúster; puede consumir mensajes en varias particiones de varios nodos del clúster. Al escribir mensajes, varios productores pueden leer mensajes de la misma partición. al mismo tiempo, para garantizar que los diferentes datos en el archivo de registro se asignen a diferentes consumidores, debe utilizar sincronización de bloqueo y otros métodos para controlar los archivos de registro en el nivel de partición

En el Por el contrario, si se acuerda que "la misma partición solo puede ser procesada por un consumidor", entonces no hay necesidad de bloqueo ni sincronización, lo que puede mejorar las capacidades de procesamiento de los consumidores y no viola la semántica de procesamiento de mensajes: originalmente requirió que varios consumidores lo procesaran, pero ahora también es posible entregárselo a un consumidor. 3- Se proporciona el método El modo de implementación del sistema de mensajes más simple, las fuentes de datos de los productores son diversas y todas están escritas en el clúster de Kafka. Al procesar mensajes, hay varios consumidores para compartir las tareas. La lógica de procesamiento de estos consumidores es la misma. La lógica de procesamiento de cada consumidor es Las particiones no se duplicarán porque las particiones se redistribuirán. , los propietarios de las particiones cambiarán, por lo que antes de redistribuir las particiones, todos los consumidores deben detener el proceso existente de extracción de dinero. Al mismo tiempo, cuando se asigna una partición a un consumidor, la información del propietario se registrará en ZK. por lo tanto, los datos del nodo en ZK deben eliminarse primero. Solo cuando el propietario libere los subprocesos relacionados con la partición, se puede asignar la partición.

Si esta información no se publica antes de redistribuir la partición, puede causar. la misma partición será propiedad de varios consumidores después del reequilibrio. Por ejemplo, la partición Pl era originalmente propiedad del consumidor. Si el proceso de extracción y el nodo ZK no se liberan, la partición será propiedad de varios consumidores. Pl se asigna al consumidor, de modo que el consumidor y el consumidor comparten la partición Pl. Esto obviamente no cumple con la restricción de "una partición solo se puede asignar a un consumidor" en fka. siguiente

Si el nodo coordinador falla, el servidor tendrá su propio mecanismo de tolerancia a fallas y seleccionará un nuevo nodo coordinador que administre a todos los consumidores del grupo de consumidores. Haga clic en Consumer Client. No tiene derecho a hacer esto. Todo lo que puede hacer es esperar un período de tiempo y consultar si el servidor ha seleccionado un nuevo nodo de coordinación. Si el consumidor descubre que ya existe un nodo de coordinación que administra el coordinador, se conectará al nuevo nodo de coordinación. Dado que el servidor selecciona recientemente este nodo de coordinación, cada consumidor debe volver a conectarse al nodo de coordinación

Cuando un consumidor se reincorpora al grupo de consumidores, la información del consumidor se actualizará antes y después de que se asigne a la partición. El impacto del trabajo de extracción es que el consumidor debe dejar de extraer mensajes antes de enviar una "solicitud de unirse al grupo" y reiniciar la extracción de mensajes después de recibir la partición en la "respuesta de unirse al grupo" para que la aplicación cliente conozca al consumidor. Cuando la partición administrada cambia, el cliente también puede configurar un "escucha de reequilibrio del consumidor" personalizado antes y después de unirse al grupo para realizar los cambios apropiados en la partición.

Procesamiento