Introducción a los conceptos y componentes de Kafka

Sistema de cola de mensajes distribuido por Kafka

1. Sistema de cola de mensajes distribuido, primero en entrar, primero en salir, al tiempo que proporciona una función de almacenamiento en caché distribuido de datos

2.Persistencia del mensaje: la velocidad de lectura de datos puede alcanzar O (1) -lectura anticipada, escritura diferida (en secuencia, ABCDE, lectura A, lectura B; escritura adicional al final) el acceso secuencial al disco es más que memoria acceso rápido)

1. Razones de la alta velocidad de Kafka:

1.caché caché +

2. Escritura secuencial (escritura de datos, secuencia de disco) +

3. Copia cero (1. Permita que los datos en la caché del sistema operativo se envíen a la tarjeta de red 2. La tarjeta de red se transmite a los consumidores descendentes)

4. Envío por lotes + compresión de datos

Resumen de Kafka : sistema de registro distribuido, particionado, multi-copia, multi-suscriptor, coordinado basado en zookeeper

2. Para garantizar la fiabilidad del mensaje, es necesario configurar al menos los siguientes parámetros: consulte los detalles a continuación.

Nivel de tema: factor de replicación> = 3; copias múltiples

Nivel de productor: acks = -1; establecer productor.type = sync en el modo de envío simultáneo;

              ack = -1: El productor debe esperar a que todos los seguidores en el ISR confirmen que se reciben los datos antes de que se considere que se completa una transmisión, la confiabilidad es la más alta

Nivel de intermediario: cierre la elección de líder incompleta, es decir, unclean.leader.election.enable = false;

Tres, el papel de kafka : búfer de mensajes, flume millones, mientras que Sparkstreaming solo puede manejar decenas de miles, el búfer de Kafka es necesario en el medio

1. características de kafka:

- alto rendimiento, baja latencia : puede manejar cientos de miles de mensajes por segundo kafka , su latencia más baja de solo unos pocos milisegundos

- Escalabilidad : expansión de calor de soporte de clúster kafka

- durabilidad, confiabilidad : el mensaje se conserva en el disco local y admite la copia de seguridad de datos para evitar la pérdida de datos

- tolerancia a fallas : permite que los nodos en el clúster fallen (si el número de copia es n, n-1 nodos permiten fallas)

- alta concurrencia : admite miles de clientes de lectura y escritura simultáneamente

Escenarios de aplicación de Kafka

Los principales escenarios de aplicación son: recopilación de registros, sistema de mensajes, seguimiento de la actividad del usuario, indicadores operativos, procesamiento de transmisión, etc.

  • Sistema de mensajes
  • Sistema de registro
  • Procesamiento de flujo

2. Descripción del componente

• Kafka se distribuye internamente y un clúster de Kafka generalmente incluye varios Brokers.

• Equilibrio de carga de Zookeeper: divida el tema en varias particiones y cada agente almacena una o más particiones.

• Múltiples productores y consumidores producen y consumen mensajes simultáneamente

1. Broker: cada instancia de kafka (servidor) puede entenderse como una máquina (nodo)

2. Productor: El productor de mensajes , publica mensajes (escribe mensajes) en el terminal o servicio del clúster kafka.

  • El productor puede publicar datos en el tema que especifica y puede especificar qué mensajes del tema se asignan a qué particiones (por ejemplo, simplemente distribuya cada partición a su vez o asigne la clave a la partición correspondiente especificando la semántica de la partición)

  • El productor envía el mensaje directamente al intermediario de la partición correspondiente sin ninguna capa de enrutamiento.
  • El procesamiento por lotes se envía cuando los mensajes se acumulan hasta un cierto número o después de esperar un cierto período de tiempo.

3. Consumidor: terminal o servicio que consume mensajes (datos leídos) del clúster de Kafka .

  • Una forma más abstracta de consumo: streaming de grupos de consumidores (ID de grupo de consumidores)

  • Este método incluye la cola tradicional y los métodos de publicación y suscripción.

- Primero, los consumidores se marcan a sí mismos con un nombre de grupo de consumidores. El mensaje se entregará a una determinada instancia de consumidor en cada grupo de consumidores.

- Si todas las instancias de consumidores tienen el mismo grupo de consumidores, esto es como el método de cola tradicional.

- Si todas las instancias de consumidores tienen diferentes grupos de consumidores, esto es como el método tradicional de publicación y suscripción.

- Un grupo de consumidores es como un suscriptor lógico, y cada suscriptor está compuesto por muchas instancias de consumidores (utilizadas para expansión o tolerancia a fallas).

  • En comparación con el sistema de mensajes tradicional, Kafka tiene una garantía de pedido más sólida.
  • Debido a que el tema usa particiones, puede garantizar la secuencia y el equilibrio de carga en la operación de múltiples procesos de consumidor .
  • Los consumidores del mismo grupo pueden consumir mensajes del mismo tema en paralelo, pero los consumidores del mismo grupo no consumirán repetidamente

 

4. Cola de temas ( concepto virtual) : la categoría a la que pertenece cada mensaje publicado en el grupo de kafka . Kafka está orientado a temas

Tema y compensación

• Un tema es una categoría o nombre de fuente que se usa para publicar mensajes. El clúster de Kafka usa registros particionados y cada partición es una secuencia de mensajes que está en orden y sin cambios .

• El registro de confirmación se puede agregar continuamente. Al mensaje se le asigna una secuencia de identificación denominada desplazamiento en cada partición para identificar de forma única el mensaje en la partición.

 

1. Independientemente de si hay consumo o no, el mensaje se limpiará (si no hay consumo, el mensaje siempre será persistente y se limpiará a través de las siguientes dos configuraciones)

       (1) Configure el período de persistencia: 7 días (2) Configure la cantidad máxima de datos

2. Mantenga este desplazamiento en el registro para cada consumidor . Por lo general, el valor de compensación aumenta linealmente cuando los consumidores leen el mensaje, pero de hecho su posición la determina el consumidor.

      Control, puede consumir mensajes en cualquier orden. Por ejemplo, restablezca el desplazamiento anterior para volver a procesar.

3. Cada partición representa una unidad paralela.

5. Partición : cada tema contiene una o más particiones. La unidad asignada por kafka es la partición.

  • Almacenamiento, para lograr el equilibrio de carga (se pueden distribuir diferentes particiones en diferentes máquinas), para garantizar el orden de los mensajes

  • Garantía de secuencialidad: secuencialidad local (la secuencia está garantizada hasta cierto punto: los mensajes de suscripción se leen desde el principio hacia atrás y los mensajes de escritura se añaden al final)

  • La partición existe como carpeta

En la mayoría de los sistemas de mensajería, los mensajes sobre el mismo tema se almacenan en una cola. El concepto de partición es dividir esta cola en varias colas pequeñas, cada cola pequeña es una partición, como se muestra a continuación:

Se puede ver en la imagen de arriba. Cuando no hay partición, solo un consumidor de un tema consume la cola de mensajes. Después de adoptar la partición, si hay dos particiones y como máximo dos consumidores consumen al mismo tiempo, la velocidad de consumo definitivamente será más rápida. Si cree que no es lo suficientemente rápido, puede agregar cuatro particiones para permitir que cuatro consumidores consuman en paralelo.

¡El diseño de la partición mejora enormemente el rendimiento de Kafka! ! !

Esta imagen contiene los siguientes puntos de conocimiento:

1. Una partición solo puede ser consumida por un consumidor en el mismo grupo (solo una flecha en la figura apunta a una partición)

2. Un consumidor del mismo grupo puede consumir varias particiones (el primer consumidor de la figura consume las particiones 0 y 3)

3. La mayor eficiencia de consumo es el mismo número de particiones y consumidores. Esto asegura que cada consumidor sea completamente responsable de una partición.

4. El número de consumidores no puede ser mayor que el número de particiones . Debido a la limitación del primer punto, cuando hay más consumidores que particiones, habrá consumidores inactivos.

5. El grupo de consumidores se puede considerar como un grupo de suscriptores, en el que cada consumidor es responsable de las particiones que consume.


La relación entre tema y partición:

Cada partición es ordenada e inmutable.

Kafka puede garantizar el orden de consumo de las particiones, pero no puede garantizar el orden de consumo de los temas .

(1) El tema es un concepto lógico, la partición es un concepto físico y una o más particiones forman un tema.

(2) Varias particiones en el tema se guardan en el corredor en forma de carpetas (el contenido de cada carpeta es diferente), el número de serie de cada partición aumenta de 0 y los mensajes están en orden

Nota: Generalmente, hay tantos topocs como tablas, pero algunas tablas del mismo tipo pueden agregarse previamente y almacenarse en un tema.

   La partición tiene 2 partes: (1) registro de índice (información de índice de ubicación) (2) registro de mensajes (almacenar datos reales)

Búsqueda: dicotomía + recorrido secuencial (¿Cómo encontrar rápidamente la posición de un valor en una cola de números secuenciales dada?)


6. Segmento: la partición está compuesta físicamente por varios segmentos.

7. Desplazamiento: Cada partición consta de una serie de mensajes ordenados e inmutables , que se añaden sucesivamente a la partición. Cada mensaje en la partición tiene un número de secuencia que aumenta continuamente llamado compensación , y la compensación de compensación es única en cada partición.

Desplazamiento de desplazamiento (hay un desplazamiento en el tema), localice la posición de lectura de datos (no solo determine la posición de desplazamiento de lectura, sino también qué partición leer)

o ffset location : el número de mensajes (ubicación) que el consumidor ha consumido en la partición correspondiente donde se guarda el desplazamiento tiene cierta relación con la versión de kafka.

    El desplazamiento se guardó en zookeeper antes de la versión 0.8 de kafka.

    Después de la versión 0.8 de Kafka, el desplazamiento se almacena en el clúster de Kafka.

  •     LEO: el desplazamiento del último mensaje de cada copia

  •     HW: el desplazamiento más pequeño de todas las réplicas en una partición

Nomenclatura de compensación: los archivos de almacenamiento de Kafka llevan el nombre de offset.kafka La ventaja de usar la compensación como nombre es que es fácil de encontrar. Por ejemplo, si desea encontrar la ubicación en 2049, simplemente busque el archivo 2048.kafka. Por supuesto, el primer desplazamiento es 00000000000.kafka.

Los mensajes de Kafka son apátridas, lo que reduce la dificultad de implementación de Kafka. Los consumidores deben mantener la información de estado consumida por sí mismos.

 

8. Copia de réplica: una copia de la partición para asegurar la alta disponibilidad de la partición (se realizan múltiples copias) .

Varias copias de las particiones de Kafka son la garantía principal de la confiabilidad de Kafka . Escribir mensajes en múltiples copias permite a Kafka garantizar la durabilidad y confiabilidad de los mensajes en caso de una falla.

Hay varias particiones en el tema y cada partición tiene su propia réplica. Solo una de ellas es una réplica líder y el resto son réplicas seguidores.

La relación entre tema, partición y réplica es la siguiente:

  • La copia se puede configurar mediante el parámetro replication-factor al configurar el tema, o se puede especificar configurando defalut.replication-factor en el nivel del corredor, generalmente lo configuramos en 3;

  • Una de las tres réplicas es el líder y dos réplicas son los seguidores. El líder es responsable de leer y escribir mensajes, y el seguidor es responsable de replicar periódicamente los últimos mensajes del líder para garantizar la coherencia de los mensajes entre el seguidor y El líder . Cuando el líder cae, lo hará. Se elige un nuevo líder de entre los seguidores para que se encargue de leer y escribir los mensajes. A través de la arquitectura de copia de partición, aunque se introduce la redundancia de datos, se garantiza la alta confiabilidad de Kafka.

• seguidor: un rol en la réplica, que replica (fentch) datos del líder.

• líder: Un rol en la réplica, el productor y el consumidor solo interactúan con el líder.

• Controlador: uno de los servidores del clúster de Kafka, que se utiliza para la elección del líder y varias conmutaciones por error.

9.zookeeper:

Kafka utiliza zookeeper para almacenar la metainformación y el desplazamiento del clúster.

Kafka debe implementarse junto con zookeeper. Zookeeper garantiza la disponibilidad del sistema Kafka . Parte de la información de Topic también debe almacenarse en Zookeeper.

(1) Kafka usa zookeeper para almacenar la metainformación del clúster.

(2) Una vez que el intermediario donde se encuentra el controlador está inactivo, el nodo temporal desaparece en este momento, y otros intermediarios en el clúster siempre monitorearán el nodo temporal. Si el nodo temporal desaparece, se mezclarán para crear el nodo temporal nuevamente. para asegurarse de que un nuevo corredor se convierta en el controlador.

El corredor todavía confía en ZK, y zookeeper también se usa en kafka para elegir controladores y verificar si el corredor está vivo y así sucesivamente.

zk mantiene el mismo desplazamiento:

10. Grupo de consumidores :

Los consumidores del mismo grupo pueden consumir mensajes del mismo tema en paralelo, pero los consumidores del mismo grupo no consumirán mensajes repetidamente.

Si es necesario consumir el mismo tema varias veces, se puede lograr configurando varios grupos de consumidores. Cada grupo consume por separado y no se afecta entre sí.

  • En la API de consumidor de alto nivel, cada consumidor pertenece a un grupo de consumidores.

  • Cada mensaje y partición solo puede ser consumido por un consumidor en el grupo de consumidores , pero puede ser consumido por varios grupos de consumidores

Ver comando:

11.Mensaje de mensaje - unidad de datos kafka: (evento Flume, bloque hdfs, Kafka - mensaje)

El mensaje de unidad de datos más básico de Kafka, el mensaje de consumo más grande no puede exceder 1M, que puede ser controlado por configuración

• Cada productor puede publicar algunos mensajes sobre un tema. Si el consumidor se suscribe a este tema, el mensaje recién publicado se transmitirá a este consumidor.

• formato del mensaje: - longitud del mensaje: 4 bytes -1 vacío - valor "mágico": 1 byte (número de versión del contrato de servicio de Kafka, compatible)

- crc32: 4 bytes - marca de tiempo 8 bytes - carga útil: n bytes

resistencia kafka:

• El diseño de almacenamiento de Kafka es simple: cada partición de tema corresponde a un registro lógico (un registro es un conjunto de archivos segmentados del mismo tamaño)

• Cada vez que un productor publica un mensaje en una partición, el agente agrega el mensaje al último segmento del archivo de segmento . Cuando la cantidad de mensajes publicados alcanza el valor establecido o después de que ha transcurrido un cierto período de tiempo, una sección de archivos se descarga realmente en el disco. Una vez completada la redacción, el mensaje se revela al consumidor.

• A diferencia de los sistemas de mensajería tradicionales, los mensajes almacenados en el sistema Kafka no tienen un ID de mensaje claro.

• El mensaje se expone a través de un desplazamiento lógico en el registro .

12. Alta eficiencia de transmisión: copia cero, llamada al kernel, copia directamente los datos del disco al socket, en lugar de transmitirlos a través de la aplicación.

copia cero: para reducir la copia de bytes, Kafka utiliza la llamada al sistema sendfile proporcionada por la mayoría de los sistemas

Los mensajes de Kafka son apátridas, lo que reduce la dificultad de la implementación de Kafka. Los consumidores deben mantener la información de estado consumida por sí mismos , y al agente no le importa en absoluto.

Este diseño es muy sutil, contiene innovación en sí

- Eliminar un mensaje del agente se vuelve complicado porque el agente no sabe si el consumidor ya ha utilizado el mensaje. Kafka resuelve este problema de manera innovadora aplicando un SLA simple basado en el tiempo a la política de retención. Cuando el mensaje está en el agente durante un cierto período de tiempo, se eliminará automáticamente.

- Beneficio: los consumidores pueden volver deliberadamente a la compensación anterior para volver a consumir datos. Esto viola las convenciones comunes de las colas, pero ha demostrado ser una característica básica de muchos consumidores.

13. Garantía de entrega confiable

Kafka adopta la estrategia de envío de mensajes al menos una vez de forma predeterminada . Es decir, la secuencia de procesamiento en el lado del consumidor es obtener el mensaje -> procesar el mensaje -> guardar la ubicación . Esto puede hacer que los mensajes que ya han sido procesados ​​por el cliente anterior se procesen cuando el nuevo cliente asume el control una vez que el cliente cuelga.

Tres estrategias de garantía:

- Como mucho, los mensajes se pueden perder, pero nunca se repetirá la transmisión (rara vez se usa)

- Al menos un mensaje nunca se perderá, pero puede transmitirse repetidamente (de uso común )

- Exactamente una vez, cada mensaje definitivamente se transmitirá una vez y solo una vez

Gestión de copias

• Kafka replica el registro en varios servidores designados.

• La unidad de la copia es la partición. En circunstancias normales, cada partición tiene un líder y 0 o más seguidores.

• El líder maneja todas las solicitudes de lectura y escritura en la partición correspondiente. El número de particiones puede ser mayor que el número de intermediarios, y el líder también se distribuye.

• El registro del seguidor es el mismo que el del líder, y el seguidor replica pasivamente al líder. Si el líder falla, uno de los seguidores se convertirá automáticamente en el nuevo líder.

14. Conjunto de ISR (copia sincronizada) réplica sincronizada: el número de particiones seguidoras que la partición líder mantiene sincronizadas

Hay varias particiones para temas en el clúster de Kafka. Para lograr una alta disponibilidad, se adopta una estrategia de copia de registros:

--- Cuando algunas máquinas cuelgan, si el líder cuelga, debe ser un seguidor en el conjunto de ISR para tener la oportunidad de convertirse en el líder. Porque los datos que lo representan en esta lista de ISR están sincronizados con el líder.

Colección ISR, siempre que los seguidores de la colección tengan la oportunidad de convertirse en el líder.

Cómo hacerle saber al líder si el seguidor recibe datos correctamente (latido, ack)

15. Cómo juzgar estar vivo:

(1) Latido del corazón

(2) Cómo el esclavo puede seguir la actualización del líder para no caer demasiado lejos, se considera efectivo, de lo contrario se considera que el esclavo está caído y el esclavo debe ser eliminado del ISR

Supongo que te gusta

Origin blog.csdn.net/qq_36816848/article/details/113637099
Recomendado
Clasificación