Este es Kafka! (Imagen múltiple + en profundidad)

Autor: bai_nian_min_guo https://www.cnblogs.com/bainianminguo/p/12247158.html

1. Descripción general de kafka

1.1 Definición

Kakfa es una cola de mensajes distribuidos basada en el modelo de publicación / suscripción, utilizada principalmente en el procesamiento en tiempo real de grandes datos

1.2, cola de mensajes

1.2.1. Cola de mensajes tradicional y modo de cola de mensajes de nuevo estilo

Lo anterior es una cola de mensajes tradicional. Por ejemplo, si un usuario desea registrar información, después de que la información del usuario se escribe en la base de datos, hay algunos otros procesos detrás, como enviar un mensaje de texto, debe esperar a que estos procesos se completen y regresar al usuario.

La nueva cola es, por ejemplo, una información de registro de usuario, los datos se colocan directamente en la base de datos, se devuelven directamente al usuario con éxito

1.2.2. Los beneficios de usar colas de mensajes

A, desacoplamiento

B. recuperabilidad

C, tampón

D, flexibilidad y capacidad de procesamiento máxima

E. comunicación asincrónica

1.2.3, el modo de la cola de mensajes

A. Modo punto a punto

El productor del mensaje envía el mensaje a la cola del mensaje, y luego el consumidor del mensaje lo toma de la cola y lo consume. Después de que el mensaje se consume, no se almacena en la cola. Por lo tanto, es imposible que un consumidor de mensajes consuma mensajes que se han consumido; la cola admite múltiples consumidores, pero para un mensaje, solo un consumidor puede consumir; si desea enviar a múltiples consumidores, necesita Envía este mensaje

B] Modelo de publicación / suscripción (uno a muchos, los consumidores no borrarán el mensaje después de consumir datos)

El productor del mensaje publica el mensaje en el tema, y ​​hay varios consumidores de mensajes (suscripciones) que consumen el mensaje al mismo tiempo. A diferencia del método punto a punto, el mensaje publicado en el tema será consumido por todos los suscriptores; pero la retención de datos es limitada, El valor predeterminado es de 7 días, porque no es un sistema de almacenamiento; Kafka está en este modo; hay dos formas, una es que los consumidores consuman activamente (extraigan) mensajes, en lugar de que los productores envíen mensajes a los consumidores; además Una es que los productores envían activamente mensajes a los consumidores, de forma similar a las cuentas públicas.

1.3, la arquitectura básica de Kafka

La arquitectura básica de kafka está compuesta principalmente por corredores, productores y consumidores, y actualmente incluye al cuidador del zoológico.

El productor es responsable de enviar mensajes.

El intermediario es responsable del almacenamiento en memoria intermedia de los mensajes. Los temas se pueden crear en el intermediario, y cada tema tiene los conceptos de partición y replicación

El grupo de consumidores es responsable de procesar los mensajes. Los consumidores en el mismo grupo de consumidores no pueden consumir los datos en la misma partición. El grupo de consumidores mejora principalmente la capacidad de consumo. Por ejemplo, un consumidor consume 100 datos antes, y ahora son 2 consumidores. Los consumidores consumen 100 datos, lo que puede mejorar la capacidad de consumo; por lo tanto, el número de consumidores en el grupo de consumidores debe ser menor que el número de particiones, de lo contrario habrá consumidores que pueden consumir sin particiones, lo que resulta en un desperdicio de recursos

Nota: Pero los consumidores en diferentes grupos de consumidores pueden consumir los mismos datos de partición

Si Kakfa quiere un clúster de componentes, solo necesita estar registrado en un zk, y el progreso o el desplazamiento o la posición de consumo del consumo de mensajes también se conserva en zk

Antes de 0.9, el desplazamiento se almacenaba en zk

Después de la versión 0.9, el desplazamiento se almacena en kafka, que define un tema del sistema dedicado a almacenar datos de desplazamiento;

¿Por qué cambiarlo? Considerando principalmente el cambio frecuente de la compensación, la presión sobre zk__ es mayor, y el procesamiento de kafka__ también es más complicado

1.4, armadura kafka

R. La instalación de Kafka solo necesita descomprimir el paquete de instalación para completar la instalación.

tar -zxvf kafka_2.11 -2.1.1.tgz -C / usr / local /

B. Ver el archivo de configuración

[root@es1 config]# pwd
/usr/local/kafka/config
[root@es1 config]# ll
total 84
-rw-r--r--. 1 root root  906 Feb  8  2019 connect-console-sink.properties
-rw-r--r--. 1 root root  909 Feb  8  2019 connect-console-source.properties
-rw-r--r--. 1 root root 5321 Feb  8  2019 connect-distributed.properties
-rw-r--r--. 1 root root  883 Feb  8  2019 connect-file-sink.properties
-rw-r--r--. 1 root root  881 Feb  8  2019 connect-file-source.properties
-rw-r--r--. 1 root root 1111 Feb  8  2019 connect-log4j.properties
-rw-r--r--. 1 root root 2262 Feb  8  2019 connect-standalone.properties
-rw-r--r--. 1 root root 1221 Feb  8  2019 consumer.properties
-rw-r--r--. 1 root root 4727 Feb  8  2019 log4j.properties
-rw-r--r--. 1 root root 1925 Feb  8  2019 producer.properties
-rw-r--r--. 1 root root 6865 Jan 16 22:00 server-1.properties
-rw-r--r--. 1 root root 6865 Jan 16 22:00 server-2.properties
-rw-r--r--. 1 root root 6873 Jan 16 03:57 server.properties
-rw-r--r--. 1 root root 1032 Feb  8  2019 tools-log4j.properties
-rw-r--r--. 1 root root 1169 Feb  8  2019 trogdor.conf
-rw-r--r--. 1 root root 1023 Feb  8  2019 zookeeper.properties

C, modifique el archivo de configuración server.properties

Establecer broker.id Este es el identificador único del clúster Kafka para distinguir cada nodo

D. Establecer la ruta de almacenamiento de datos de kafka

Nota: No puede haber otros directorios que no sean kafka en este directorio; de lo contrario, el clúster kafka no se iniciará

E. Establezca si el tema se puede eliminar. De forma predeterminada, no se permite eliminar el tema de kafka

F, tiempo de retención de datos de Kafka, el valor predeterminado es 7 días

G, el tamaño máximo del archivo de registro, si el archivo de registro supera 1g, se creará un nuevo archivo

H. Kafka conexión dirección zk y conexión kafka tiempo de espera

J, el número de particiones predeterminadas

Lectura recomendada: 6 pasos para dominar Kafka en todas las direcciones .

1.5, inicie kafka

A. Método de inicio 1. Kafka solo puede iniciarse mediante un solo nodo, por lo que cada nodo kakfa debe iniciarse manualmente. Las siguientes formas se inician bloqueando

B. Modo de inicio 2, inicio en modo de protección, recomendado

1.6 Operación Kafka

A. Ver los temas existentes en el grupo actual de Kafka

Nota: El cuidador del zoológico conectado aquí, no el kafka conectado

B. Cree un tema, especifique el número de fragmentos y copias.

Nota:

factor de replicación: número de copias

factor de replicación: número de particiones

Tema: nombre del tema

Si el clúster kafka actual tiene solo 3 nodos intermediarios, el factor de replicación máximo es 3. El siguiente ejemplo crea una copia de 4 e informará un error.

C, eliminar tema

D. Ver información del tema

1.7. Iniciar mensaje de productor, kafka viene con un cliente productor y consumidor

A. Inicie un productor, preste atención al puerto 9092 conectado en este momento, el clúster kafka conectado

B. Inicie un consumidor Tenga en cuenta que el puerto 9092 todavía está conectado y el puerto 2181 está conectado antes de la versión 0.9.

Aquí comenzamos 2 consumidores para probar

Nota: Si no especifica el archivo de configuración del grupo de consumidores, de manera predeterminada cada consumidor pertenece a un grupo de consumidores diferente

C. Envíe un mensaje, puede ver que cada consumidor puede recibir el mensaje

D. Datos reales en Kakfa

Segundo, la profunda arquitectura kafka.

Kafka no puede garantizar el orden global de los mensajes, solo el orden de los mensajes dentro de una partición, porque los mensajes de consumo del consumidor se asignan al azar en diferentes particiones

2.1, el flujo de trabajo de Kafka

Los mensajes en Kafka se clasifican por tema. Los productores generan mensajes y los consumidores los consumen.

El tema es un concepto lógico y la partición es un concepto físico.

Cada partición tiene el concepto de una copia.

Cada partición corresponde a un archivo de registro. El archivo de registro almacena los datos generados por el productor. Los datos generados por el productor se agregarán continuamente al final del archivo de registro, y cada dato tiene su propio desplazamiento. Registrará en tiempo real el desplazamiento que ha consumido para que pueda continuar consumiendo desde la posición anterior cuando se produce un error. Este desplazamiento se guarda en el archivo de índice

El desplazamiento de Kafka se ordena dentro de la partición, pero no hay orden en las diferentes particiones, kafka no garantiza el orden global de los datos.

2.2, principio de Kafka

Dado que los mensajes producidos por los productores se agregan constantemente al final del archivo de registro, para evitar que el archivo de registro sea demasiado grande y resulte en un posicionamiento de datos ineficiente, Kafka utiliza un mecanismo de fragmentación e indexación para dividir cada partición en múltiples segmentos, cada segmento corresponde 2 archivos ---- archivo de índice y archivo de registro, estos 2 archivos se encuentran en la misma carpeta, la regla de denominación de la carpeta es el nombre del tema + número de partición

El nombre de archivo de los archivos Indx y log es el desplazamiento de los datos actuales cuyo índice es el más pequeño.

¿Cómo consume Kafka los datos rápidamente?

La información de índice de los datos almacenados en el archivo de índice, la primera columna es el desplazamiento, y el desplazamiento en el archivo de registro correspondiente a estos datos en la segunda columna es como cuando leemos el archivo y usamos seek () para establecer la posición actual del mouse , Puedes encontrar los datos más rápido

Si desea consumir datos con un desplazamiento de 3, primero busque el archivo de índice en el que se encuentran los datos por dicotomía, y luego encuentre el desplazamiento de los datos en el archivo de registro a través del desplazamiento en el índice; de ​​esta manera puede localizar rápidamente los datos y consumir

Entonces, aunque kakfa almacena los datos en el disco, su velocidad de lectura sigue siendo muy rápida.

Preste atención a la cuenta pública de WeChat: pila de tecnología Java, responda en segundo plano: arquitectura, puede obtener las N piezas de productos secos de arquitectura que he organizado.

3. Productores y consumidores de Kafka

3.1 Productor de kafka

El papel de la partición de Kafka

La razón principal de las particiones de Kafka es proporcionar concurrencia para mejorar el rendimiento, porque leer y escribir se lee y escribe en unidades de particiones;

¿En qué partición está enviando el mensaje el productor?

A, especifique la partición en el cliente

B. Sondeo (recomendado) el mensaje 1 va a p1, el mensaje 2 va a p2, el mensaje 3 va a p3, el mensaje 4 va a p1, el mensaje 5 va a p2 y el mensaje 6 va a p3. . . . . . .

3.2 ¿Cómo garantiza kafka la fiabilidad de los datos? Garantizado por ack

Para garantizar que los datos enviados por el productor puedan enviarse de manera confiable al tema especificado, después de que cada parte del tema reciba los datos enviados por el productor, debe enviar el reconocimiento al productor (confirmar la recepción), si el productor recibe el reconocimiento , Se producirá la siguiente ronda de envío; de lo contrario, los datos se reenviarán

Entonces, ¿cuándo enviará Kafka al productor?

Asegúrese de que el seguidor y el líder estén sincronizados, el líder envía un reconocimiento al productor, para asegurarse de que después de que el líder cuelgue y el nuevo líder pueda ser elegido del seguidor, los datos no se perderán

¿Cuántos seguidores enviarán un reconocimiento después de la sincronización?

Escenario 1: la mitad de la sincronización se ha completado, envíe un reconocimiento

Escenario 2: después de completar toda la sincronización, se envía el reconocimiento (kafka utiliza este método)

Después de adoptar el segundo esquema, imagine el siguiente escenario, el líder recibe los datos, todos los seguidores comienzan a sincronizar los datos, pero hay un seguidor que no ha podido completar la sincronización debido a algún tipo de falla, entonces el líder debe esperar hasta que se sincronice Para enviar un reconocimiento, lo que afectará en gran medida la eficiencia ¿Cómo resolver este problema?

El líder mantiene una lista ISR dinámica (el papel de la copia de sincronización), solo el seguidor y el líder en esta lista deben sincronizarse; cuando el seguidor en el ISR completa la sincronización de datos, el líder enviará el reconocimiento al productor, si el seguidor es largo Si los datos no están sincronizados con el líder, el seguidor se eliminará del ISR. Este umbral de tiempo también se personaliza; después de que el líder falle, se elegirá un nuevo líder del ISR

¿Cómo elegir el nodo de ISR?

Primero, el tiempo de comunicación debe ser rápido. Para comunicarse con el líder rápidamente, el tiempo es de 10 segundos por defecto.

Luego mire la brecha de datos del líder, el número de mensajes es 10000 por defecto (se eliminó la versión posterior)

¿Por qué se elimina? Debido a que kafka envía mensajes en lotes, el líder lo aceptará en un instante, pero el seguidor aún no ha sido retirado, por lo que será expulsado con frecuencia para unirse al ISR, y esta información se guardará en zk y memoria, por lo que será frecuente Actualiza zk y memoria.

Sin embargo, para algunos datos menos importantes, la confiabilidad de los datos no es muy alta y puede tolerar una pequeña cantidad de pérdida de datos, por lo que no hay necesidad de esperar a que todos los seguidores en el ISR tengan éxito

Por lo tanto, kafka proporciona a los usuarios tres niveles de confiabilidad. Los usuarios pueden intercambiar confiabilidad y latencia. Esta configuración se establece en la generación de la configuración de parámetros kafka: acks

A, acks es 0

Los productores no esperan un reconocimiento, solo dejan caer los datos al tema, la probabilidad de esta pérdida de datos es muy alta

B, ack es 1

El líder volverá al reconocimiento una vez realizado el pedido, y habrá pérdida de datos. Si el líder falla después de que se complete la sincronización, se producirá la pérdida de datos.

C, ack es -1 (todos)

El líder y el seguidor (ISR) solo volverán al reconocimiento después de que se haya realizado el pedido, y habrá duplicación de datos. Si el líder ha completado la escritura y la sincronización del seguidor se ha completado, pero la falla en devolver el reconocimiento causará la duplicación de datos; en casos extremos, También habrá pérdida de datos. Por ejemplo, el seguidor y el líder se comunican muy lentamente, por lo que solo hay un nodo líder en el ISR. En este momento, el líder volverá al ataque después de completar la orden, si el líder falla en este momento, causará pérdida Datos

3.3 ¿Cómo garantiza Kafka la consistencia de los datos de consumo? Garantizado por HW

LEO: se refiere al desplazamiento máximo de cada seguidor

HW (nivel de agua alto): se refiere al desplazamiento más grande que puede ver el consumidor, el LEO más pequeño en la cola LSR, es decir, el consumidor solo puede ver 1 ~ 6 datos, y los datos posteriores no se pueden ver y no se pueden consumir

Para evitar que el líder se cuelgue, por ejemplo, después de que el consumidor actual consume 8 datos, el líder se cuelga. En este momento, por ejemplo, f2 se convierte en el líder y f2 no ​​tiene los 9 datos, entonces el consumidor informará un error, por lo que el parámetro HW está diseñado , Solo exponga la menor cantidad de datos a los consumidores, evite el problema anterior

3.3.1, HW garantiza la consistencia del almacenamiento de datos

A, fracaso del seguidor

Después de que el seguidor falla, el LSR se elevará temporalmente. Después de que el seguidor se restaure, el seguidor leerá el último HW grabado por el disco local e interceptará el archivo de registro que es más alto que el HW. Desde el HW, el líder se sincronizará con el líder. , Cuando el LEO del seguidor es mayor o igual que la altura de la partición, es decir, el seguidor alcanza al líder, puede volver a unirse al LSR

B. Fracaso del líder

Después de que el Líder falle, se seleccionará un nuevo líder del ISR. Luego, para garantizar la consistencia de los datos entre varias copias, los seguidores restantes primero truncarán las partes de sus archivos de registro que sean más altas que hw (nuevo líder No lo interceptaré), y luego sincronizaré los datos del nuevo líder

Nota: Esto es para garantizar la coherencia del almacenamiento de datos entre varias copias y no garantiza que los datos no se pierdan ni se repitan.

3.3.2 Preciso una vez (idempotencia) para garantizar que los datos no estén duplicados

Ack se establece en -1, puede asegurarse de que los datos no se pierdan, pero habrá duplicación de datos (al menos una vez)

Ack se establece en 0, puede asegurarse de que los datos no se repitan, pero no puede garantizar que los datos no se pierdan (como máximo una vez)

Pero, ¿y si las patas de pescado y oso tienen ambas? En este momento, Exactl una vez fue presentado

Después de la versión 0.11, se introduce la idempotencia para resolver la duplicación de datos dentro del clúster kakfa Antes de la versión 0.11, los propios consumidores realizan el procesamiento

Si la idempotencia está habilitada, ack por defecto es -1, kafka asignará un pid a cada productor, y no asignará un número de secuencia a cada mensaje. Si pid, partición y número de secuencia son iguales, kafka considera que son datos duplicados , No se guardará en el disco; pero si el productor se bloquea, habrá duplicación de datos; por lo tanto, la idempotencia resuelve la duplicación de datos en una sola partición de una sola sesión, pero entre particiones o entre sesiones La duplicación de datos no tiene solución

3.4 consumidores de Kafka

3.4.1 Métodos de consumo

Hay dos formas de consumir mensajes en la cola de mensajes, push (número público WeChat) y pull (kafka). El modo push es difícil de adaptar a los consumidores con diferentes tasas de consumo porque la tasa de envío de consumo es determinada por el corredor. Los mensajes se entregan a la velocidad más rápida, pero esto puede hacer que los consumidores tengan muy poco tiempo para procesarlos.El rendimiento típico es la denegación de servicio y la congestión de la red. El método de extracción puede consumir la capacidad de consumo del consumidor a un ritmo adecuado.

La desventaja del modo de extracción es que si kafka no tiene datos, los consumidores pueden caer en un ciclo infinito y siempre devolver datos vacíos. Para esto, los consumidores de kafka pasan un parámetro de tiempo de espera al consumir datos, si no hay datos disponibles para el consumo en ese momento , Los consumidores esperarán un tiempo antes de regresar

3.4.2 Estrategia de asignación de partición

Un grupo de consumidores tiene múltiples consumidores, y un tema tiene múltiples particiones. Por lo tanto, inevitablemente implicará la asignación de particiones, es decir, determinar qué partición es consumida por qué consumidor

Kafka proporciona dos formas, una es que el round robin (RountRobin) es efectivo para el grupo de temas, y la otra es (Rango) es efectivo para un solo tema

Entrenamiento de rotación: El requisito previo es que un consumidor en un consumidor necesita suscribirse al mismo tema. De lo contrario, habrá problemas; forma no predeterminada

Los consumidores en el mismo grupo de consumidores no pueden consumir la misma partición al mismo tiempo

Por ejemplo, tres consumidores consumen 9 particiones de un tema.

Si hay 2 consumidores en un grupo de consumidores, este grupo de consumidores consume 2 temas al mismo tiempo, cada tema tiene tres particiones

Primero, trataremos 2 temas como un tema, luego hash según el tema y la partición, y luego ordenaremos por hash. Luego, el entrenamiento de rotación se asigna a 2 consumidores en un grupo de consumidores

¿Qué pasa si se suscribe de la siguiente manera?

Por ejemplo, hay 3 temas, cada tema tiene 3 particiones y hay 2 consumidores en un grupo de consumidores. El consumidor 1 se suscribe al tema1 y al tema2, el consumidor 2 se suscribe al tema2 y al tema3, luego, en tal escenario, habrá problemas con el uso del método de capacitación para suscribirse al tema

Si te suscribes de esta manera

Por ejemplo, hay 2 temas, cada tema tiene 3 particiones, un grupo de consumidores tiene 2 consumidores, el consumidor 1 se suscribe al tema1, el consumidor 2 se suscribe al tema2, por lo que usar el método de capacitación para suscribirse al tema también tendrá problemas

Por lo tanto, siempre hemos enfatizado que la premisa de suscribirse a temas usando la capacitación de rotación es que todos los consumidores en un grupo de consumidores se suscriban al mismo tema;

Entonces, el método de entrenamiento de rotación no es el método predeterminado de kafka

Rango: se divide de acuerdo con un solo tema, el método de distribución predeterminado

Los problemas de alcance conducirán a datos de consumo desequilibrados

Por ejemplo, en el siguiente ejemplo, si un grupo de consumidores se suscribe a 2 temas, parecerá que el consumidor 1 consume 4 particiones, mientras que otro consumidor consume solo 2 particiones.

¿Cuándo se activará la estrategia de partición? Cuando cambia el número de consumidores en el grupo de consumidores, se activará el ajuste de la estrategia de partición, como aumentar los consumidores en los consumidores o reducir los consumidores.

3.4.3 Mantenimiento de offset

Los consumidores pueden experimentar fallas como cortes de energía y tiempos de inactividad durante el proceso de consumo. Después de la recuperación, los consumidores deben continuar consumiendo desde la ubicación antes de la falla, por lo que los consumidores deben implementar qué compensación consumen para continuar el consumo después de la recuperación

Hay 2 ubicaciones guardadas por Offset, una es zk y la otra es kafka

Primero mire el desplazamiento guardado en zk

El desplazamiento único está determinado por los tres elementos del grupo de consumidores, el tema y la partición.

Entonces, después de que un consumidor en el grupo de consumidores se cuelga, o los consumidores aún pueden obtener esta compensación

El nodo Controlador se comunica con zk para sincronizar los datos. Quien se levante primero en este nodo registrará primero el controlador y quién será el controlador. Mantenga la información de otros nodos y controladores sincronizados

3.4.5 Casos del grupo de consumidores

Modificar ID de grupo de consumidores

Iniciar un consumidor para enviar 3 datos

Especifique el grupo de consumidores para iniciar consumidores, comience tres consumidores, puede ver que cada consumidor consume una pieza de datos

En la demostración, diferentes grupos pueden consumir el mismo tema, vemos que los consumidores de 2 consumidores consumen todos los mismos datos

Iniciar un consumidor nuevamente, este consumidor pertenece a otro grupo de consumidores

4. El eficiente mecanismo de lectura y escritura de Kafka

4.1, despliegue distribuido

Operación en paralelo de múltiples nodos

4.2, escribir en el disco secuencialmente

Los datos de producción del productor de Kafka deben escribirse en el archivo de registro. Se adjuntan al final del archivo durante el proceso de escritura. Se escriben secuencialmente y el sitio web oficial tiene datos para indicarlo. Para el mismo disco, la escritura secuencial puede alcanzar 600M / S, mientras que la escritura aleatoria es solo de 100K / S. Esto está relacionado con la estructura mecánica del disco. La razón por la cual la escritura secuencial es rápida es porque le ahorra mucho tiempo a la cabeza

4.3, tecnología de replicación cero

En circunstancias normales, los datos se leen primero en el espacio del kernel, los datos se leen del espacio del kernel al espacio del usuario, luego la interfaz io del sistema operativo se escribe en el espacio del kernel y finalmente se escribe en el disco duro

Kafka hace esto al transmitir la transmisión io directamente en el espacio del kernel, por lo que el rendimiento de kafka es muy alto

Quinto, el papel del cuidador del zoológico en kafka

Un corredor en el clúster de Kafka será elegido como el controlador, que es responsable de la gestión de los corredores del clúster en línea y fuera de línea, todos los temas de distribución de copia de partición y elección del líder.

Recomiendo ir a mi blog para leer más:

1. Java JVM, colección, subprocesamiento múltiple, tutoriales de la serie de nuevas características

2. Spring MVC, Spring Boot, serie de tutoriales Spring Cloud

3. Maven, Git, Eclipse, Intellij IDEA serie de tutoriales de herramientas

4. Las últimas preguntas de la entrevista para Java, backend, arquitectura, Alibaba y otros fabricantes importantes.

La vida es bella, nos vemos mañana ~

Publicado 470 artículos originales · ganó 1029 · vistas 1.45 millones +

Supongo que te gusta

Origin blog.csdn.net/youanyyou/article/details/105359967
Recomendado
Clasificación