Principio de la arquitectura vernácula de Kafka

Introducción

Se acerca la era de los macrodatos, si no conoce a Kafka, ¡realmente está fuera de servicio! Según las estadísticas, un tercio de las empresas Fortune 500 del mundo utilizan Kafka, incluidas todas las empresas de viajes TOP10, los 7 bancos TOP10, las 8 compañías de seguros TOP10, las 9 empresas de telecomunicaciones TOP10, etc. LinkedIn, Microsoft y Netflix usan Kafka para procesar billones de información todos los días. En este artículo, analicemos juntos los principios arquitectónicos de kafka.


red oficial de kafka: http://kafka.apache.org/

1. Introducción a kafka

Kafka fue desarrollado originalmente por Linkedin. Es un sistema de registro distribuido, particionado, multi-copia, multi-suscriptor , coordinado por zookeeper (también se puede utilizar como un sistema MQ). A menudo se utiliza para registros web / nginx, registros de acceso, Servicio de mensajes, etc. Linkedin contribuyó a la Fundación Apache en 2010 y se convirtió en uno de los principales proyectos de código abierto.

2. Características de Kafka

  • Alto rendimiento y baja latencia: Kafka puede procesar cientos de miles de mensajes por segundo y su latencia es tan baja como unos pocos milisegundos;

  • Escalabilidad: el clúster de Kafka admite la expansión en caliente;

  • Persistencia y confiabilidad: los mensajes se guardan en el disco local y se admite la copia de seguridad de datos para evitar pérdidas;

  • Tolerancia a fallos: permita que los nodos del clúster fallen (si el número de copias de la partición es n, entonces n-1 nodos pueden fallar);

  • Alta simultaneidad: una sola máquina puede admitir la lectura y escritura simultáneas de miles de clientes;

3. Escenarios de aplicación de kafka

  • Recopilación de registros : una empresa puede utilizar Kafka para recopilar registros de varios servicios y abrirlos a varios terminales de consumidores, como Hadoop, Hbase, Solr, etc., a través de una interfaz unificada a través de Kafka.

  • Sistema de mensajes : desacoplamiento de productores y consumidores, almacenamiento en caché de mensajes, etc.

  • Seguimiento de la actividad del usuario : Kafka se utiliza a menudo para registrar diversas actividades de usuarios web o de aplicaciones, como navegación web, registros de búsqueda, clics y otras actividades. Varios servidores publican esta información sobre temas de Kafka y luego los suscriptores se suscriben a estos. tema para realizar análisis y monitoreo en tiempo real, o cargarlo en hadoop o almacén de datos para análisis y minería fuera de línea.

  • Indicadores operativos : Kafka también se utiliza a menudo para registrar datos de seguimiento operativo.

  • Transmisión

4. Arquitectura de Kafka (¡lo más destacado!)

El siguiente es un diagrama de arquitectura de Kafka,

En general, la arquitectura de Kafka contiene cuatro componentes principales: productor, consumidor, grupo de kafka, grupo de cuidador del zoológico . En comparación con el diagrama de estructura anterior, aclaremos primero algunos términos muy importantes (¡vea la imagen! Compare la imagen para entender ~)

1 、 corredor

El clúster de Kafka contiene uno o más servidores y cada nodo de servidor se denomina intermediario.

2 、 tema

Cada mensaje publicado en el clúster de Kafka tiene una categoría. Esta categoría se llama tema. De hecho, el mensaje se clasifica por tema. El tema es una clasificación lógica. Los datos del mismo tema pueden estar en el mismo intermediario o en el mismo intermediario. Diferentes nodos de intermediarios.

3 、 partición

Partición , cada tema se divide físicamente en una o más particiones, y cada partición corresponde físicamente a una carpeta , que almacena todos los mensajes y archivos de índice de esta partición . Puede especificar que el número de parición al crear un tema, el productor envía un mensaje al tema, el mensaje se basará en un plan de partición anexado al archivo de la partición al final , pertenece al orden de escritura en disco , por lo que la eficiencia es muy alta (probado, escritura secuencial eficiente que escritura aleatoria en disco La memoria es aún mayor, lo que es una garantía muy importante para el alto rendimiento de Kafka).

La estrategia de partición mencionada anteriormente , la denominada estrategia de división en zonas, es determinar el productor para enviar un mensaje al algoritmo que particiones . Kafka nos proporciona una estrategia de partición predeterminada y también admite estrategias de partición personalizadas. Kafka le permite establecer una clave para cada mensaje. Una vez que el mensaje se define con una clave, puede garantizar que todos los mensajes de la misma clave ingresen a la misma partición. Esta estrategia es una especie de estrategia personalizada, llamada " presione Estrategia de almacenamiento de claves de mensajes ", o estrategia de ordenación de claves .

Se pueden implementar varias particiones del mismo tema en varias máquinas para lograr la escalabilidad de Kafka . Los datos en la misma partición están ordenados, pero múltiples particiones bajo el tema no pueden garantizar el orden cuando se consumen datos. En el escenario donde el orden de consumo de mensajes debe estar estrictamente garantizado, el número de particiones se puede establecer en 1, pero esto La desventaja de este enfoque es que reduce el rendimiento. En términos generales, solo es necesario garantizar el orden de cada partición y luego establecer la clave del mensaje para garantizar que los mensajes con la misma clave caigan en la misma partición, lo que puede satisfacer la mayoría de las aplicaciones.

4 、 desplazamiento

Cada mensaje en la partición está marcado con un número de secuencia. Este número de secuencia representa el desplazamiento del mensaje en la partición, llamado desplazamiento. Cada mensaje tiene un desplazamiento único en la partición. La persona del mensaje especifica el desplazamiento que se consumirá. Noticias.

En circunstancias normales, el consumidor incrementará el desplazamiento después de consumir un mensaje y se preparará para consumir el siguiente mensaje, pero también es posible establecer el desplazamiento en un valor menor y volver a consumir algunos mensajes que se han consumido. Se puede ver que el desplazamiento lo controla el consumidor. Sí, el consumidor consume el mensaje que quiere consumir, por lo que el corredor kafka no tiene estado y no necesita marcar qué mensajes se han consumido.

5 、 productor

El productor, el productor envía un mensaje al tema especificado, y el mensaje se agrega al final de una partición de acuerdo con las reglas de asignación.

6 、 consumidor

Los consumidores, los consumidores consumen datos de temas.

7, grupo de consumidores

Grupo de consumidores. Cada consumidor pertenece a un grupo de consumidores específico. El grupo de consumidores se puede especificar para cada consumidor. Si no se especifica, pertenece al grupo predeterminado.

Un mensaje del mismo tema solo puede ser consumido por un consumidor en el mismo grupo de consumidores, pero varios grupos de consumidores pueden consumir el mensaje al mismo tiempo. Este es también el método utilizado por Kafka para realizar la transmisión y unidifusión de un mensaje temático. Si se requiere transmisión, solo se puede colocar un consumidor en un grupo de consumidores. Para realizar la unidifusión, coloque a todos los consumidores en el mismo grupo de consumidores. Eso es.

Con el grupo de consumidores, los consumidores pueden agruparse libremente sin enviar mensajes a diferentes temas varias veces.

8 、 líder

Cada partición tiene varias copias, una y solo una de ellas es el líder, y el líder es responsable de todas las operaciones de lectura y escritura del cliente.

9 、 seguidor

El seguidor no brinda servicios al mundo exterior y solo mantiene la sincronización de datos con el líder. Si el líder falla, se elige a un seguidor para que actúe como el nuevo líder. Cuando el seguidor y el líder cuelgan, se atascan o la sincronización es demasiado lenta, el líder eliminará al seguidor de la lista ISR y creará un nuevo seguidor.

10 、 reequilibrio

Múltiples consumidores en el mismo grupo de consumidores coordinan su trabajo de consumo entre sí. Piénselo de esta manera. Un tema se divide en múltiples particiones. Todos los consumidores en un grupo de consumidores cooperan para consumir todas las particiones bajo un determinado tema al que están suscritos. (Cada consumidor consume parte de la partición), Kafka distribuirá uniformemente todas las particiones del tema a cada consumidor del grupo de consumidores, como se muestra a continuación,

Reequilibrar significa "reequilibrar". Después de que un consumidor del grupo de consumidores cuelga, otros consumidores redistribuyen automáticamente la partición del tema suscrito. Este es un medio importante para que los consumidores de Kafka logren una alta disponibilidad. Como se muestra en la figura siguiente, C2 en el grupo de consumidores A cuelga y C1 recibirá P1 y P2 para lograr el reequilibrio. Del mismo modo, cuando un nuevo consumidor se une al grupo de consumidores, también desencadenará una operación de reequilibrio.

5. Algunas explicaciones de la arquitectura de Kafka

  • Un clúster típico de Kafka contiene varios productores, varios intermediarios (Kafka admite la expansión horizontal, generalmente cuanto mayor es el número de intermediarios, mayor es el rendimiento del clúster), varios grupos de consumidores y un clúster de cuidadores del zoológico. Kafka coordina la gestión del clúster de Kafka a través del guardián del zoológico, elige al líder de la partición y realiza el reequilibrio cuando cambia el grupo de consumidores.

  • El tema de Kafka se divide en una o más particiones. Se pueden distribuir varias particiones en uno o más nodos de intermediario. Al mismo tiempo, para la tolerancia a fallas, cada partición replicará varias copias, que se encuentran en diferentes nodos de intermediario. Estas copias de la partición Medio (tanto el líder como el seguidor se denominan copias de partición), una copia de partición será el líder y el resto de las copias de la partición será el seguidor. El líder es responsable de todas las operaciones de lectura y escritura del cliente. El seguidor no brinda servicios al mundo exterior. Solo sincroniza los datos del líder. Cuando el líder falla, uno de los seguidores reemplazará al líder y continuará brindando servicios al mundo exterior.

  • Para MQ tradicional, los mensajes que se han consumido se eliminarán de la cola, pero los mensajes que se han consumido en Kafka no se eliminarán de inmediato. El tiempo de retención de datos se define en el archivo de configuración kafka server.propertise. Cuando el archivo No se eliminará hasta el tiempo de almacenamiento establecido,

    # 数据的保存时间(单位:小时,默认为7天)
    
    log.retention.hours=168

    Debido a que la complejidad temporal de los mensajes de lectura de Kafka es O (1) y no tiene nada que ver con el tamaño del archivo, eliminar archivos caducados aquí no tiene nada que ver con mejorar el rendimiento de Kafka, por lo que la elección de la estrategia de eliminación debe considerar el disco y los requisitos específicos.

  • Modelo peer-to-peer VS modelo de publicación y suscripción

    En los sistemas de mensajería tradicionales, hay dos modos principales de mensajería: modo punto a punto y modo de publicación-suscripción.

    ①Modo punto a punto 

    El productor envía un mensaje a la cola. La cola admite la existencia de varios consumidores, pero para un mensaje, solo puede ser consumido por un consumidor, y en el modo punto a punto, los mensajes que se han consumido se eliminarán de la cola y dejarán de almacenarse. .

    ② Publicar y suscribir modelo

    Los productores publican mensajes sobre temas, los temas pueden ser suscritos por varios consumidores y los mensajes publicados sobre temas serán consumidos por todos los suscriptores. Kafka es un modelo de publicación-suscripción.

  • El consumidor tira y empuja

    ① Método de envío: el middleware de mensajes envía activamente el mensaje al consumidor;

    Ventajas: La ventaja es que los consumidores no necesitan abrir middleware de supervisión de subprocesos adicional, lo que ahorra gastos generales.

    Desventajas: incapaz de adaptarse a consumidores con diferentes tasas de consumo. Dado que la tasa de envío de mensajes la determina el corredor,

    La velocidad de procesamiento de los consumidores no es la misma, por lo que es fácil hacer que algunos consumidores estén inactivos y algunos consumidores se acumulen, provocando retrasos.

    La zona de descarga se desborda.

    ② Método de extracción: los consumidores toman la iniciativa de extraer mensajes del middleware de mensajes;

    Ventajas: El consumidor puede tirar según la capacidad de procesamiento;

    Desventajas: el consumidor necesita abrir otro middleware de supervisión de subprocesos, que tiene una sobrecarga de rendimiento;

    Para Kafka, el modo pull es más apropiado. El modo pull simplifica el diseño del broker. Los consumidores pueden controlar de forma autónoma la tasa de consumo de mensajes. Al mismo tiempo, los consumidores pueden controlar sus propios métodos de consumo. Pueden consumir lotes o consumir artículos uno por uno. Al mismo tiempo, pueden elegir diferentes métodos de envío para lograr una semántica de transmisión diferente.

6. Comparación de kafka y rabbitMQ

 

RabbitMQ

Kafka

Lenguaje de desarrollo

erlang

escala, Java

Modelo de arquitectura

① Siga AMQP;

② Productores, consumidores, intermediarios.

③ El corredor se compone de intercambio, enlace y cola;

④ El corredor guarda la ubicación del consumidor a través del mecanismo de confirmación;

① No sigue AMQP;

② Productores, consumidores, agrupaciones de kafka, agrupaciones de cuidadores de zoológicos;

③ El clúster de Kafka se compone de varios nodos de intermediarios. Los mensajes se clasifican según los temas y cada tema se divide en varias particiones;

④ El corredor es apátrida y el consumidor especifica la compensación;

fiabilidad

 

RabbitMQ tiene mejor confiabilidad, admite transacciones y admite el mecanismo de confirmación de mensajes

Alta disponibilidad

Se adopta la cola espejo, es decir, el modo maestro-esclavo, y los datos son asíncronos y síncronos. Cuando llega el mensaje, maestro y esclavo se escriben todos, y se devuelve el ack, lo que asegura la consistencia de los datos.

Cada partición tiene una o más copias. Estas copias se almacenan en diferentes corredores. Hay una y solo una copia de la partición como líder y el resto como seguidores. Cuando el líder no está disponible, el seguidor será elegido como el nuevo líder para continuar brindando servicios .

Solo el líder proporciona servicios de lectura y escritura, y el seguidor extrae datos sincrónicamente del líder y luego los respalda.

Rendimiento

Kafka es más alto

 

Ya sea para apoyar asuntos

colocarse

no apoyo

Balanceo de carga

Necesita apoyo externo para lograr (como: equilibrador de carga)

Kafka utiliza zk y el mecanismo de partición para lograr el equilibrio de carga

Ya sea para apoyar al consumidor Push

no apoyo

colocarse

Ya sea para apoyar a los consumidores Pull

colocarse

colocarse

Escena aplicable

Las ventajas de Kafka se reflejan principalmente en el rendimiento y se utiliza principalmente en escenarios de alto rendimiento. Como la recolección de registros.

Tiene un mayor rigor, menos posibilidad de pérdida de datos y un mayor rendimiento en tiempo real, que se utiliza para la transmisión de mensajes que requiere mayor tiempo real y confiabilidad.

 

7. ¿Por qué el rendimiento de Kafka es tan alto?

1. Leer y escribir disco secuencialmente

Kafka conserva los mensajes en el disco local. La mayoría de la gente piensa que el rendimiento de lectura y escritura del disco es deficiente y puede cuestionar el rendimiento de Kafka. De hecho, ya sea memoria o disco, la clave para rápido o lento es el método de direccionamiento. Los discos se dividen en lectura y escritura secuencial y lectura y escritura aleatoria, y la memoria también se divide en lectura y escritura secuencial y lectura y escritura aleatoria. La lectura y escritura aleatoria basada en disco es realmente lenta, pero el rendimiento de lectura y escritura secuencial basada en disco es muy alto . En términos generales, es tres órdenes de magnitud más alto que la lectura y escritura aleatoria de disco. En algunos casos, el rendimiento de lectura y escritura secuencial de disco es incluso mayor que la memoria Lectura y escritura aleatoria, aquí hay una tabla de comparación de rendimiento de la famosa revista académica ACM Queue:

2, página de caché

Para optimizar el rendimiento de lectura y escritura, Kafka utiliza la caché de página del propio sistema operativo, que utiliza la propia memoria del sistema operativo en lugar de la memoria espacial de la JVM . Esto es porque,

> Todo en la JVM es un objeto, y el almacenamiento de objetos traerá un consumo de memoria adicional;

> El uso de JVM se verá afectado por GC, a medida que aumenten los datos, la recolección de basura se volverá complicada y lenta, reduciendo el rendimiento;

Además, el propio sistema operativo ha realizado muchas optimizaciones en la caché de la página. A través de la caché de página del sistema operativo, las operaciones de lectura y escritura de Kafka se basan básicamente en la memoria del sistema, y ​​el rendimiento de lectura y escritura también se ha mejorado considerablemente.

3. Copia cero

La copia cero se refiere a la optimización de Kafka en el lado del consumidor utilizando el mecanismo de " copia cero " del sistema operativo Linux . Veamos primero todo el proceso de transmisión de datos desde el disco del intermediario hasta el extremo del consumidor a través de la red cuando el lado del consumidor consume datos:

> El sistema operativo lee los datos del disco en la caché de página del espacio del kernel (espacio del kernel);

> El programa de aplicación lee los datos de la caché de la página en el búfer de espacio del usuario;

> La aplicación escribe los datos en el búfer de espacio de usuario de nuevo en el búfer de socket en el espacio del kernel;

> El sistema operativo copia los datos del búfer del socket al búfer del hardware (como una tarjeta de red);

El proceso completo se muestra en la figura anterior. Este proceso incluye 4 operaciones de copia y 2 cambios de contexto del sistema. El cambio de contexto es un trabajo intensivo de la CPU. La copia de datos es un trabajo intensivo de E / S. El rendimiento es realmente muy ineficiente.

La copia cero es usar un método de llamada al sistema llamado sendfile () para enviar datos directamente desde la caché de la página al búfer de Socket, evitando el cambio de contexto del sistema y eliminando la copia de ida y vuelta del espacio del kernel al espacio del usuario. Como puede verse en la figura anterior, "copia cero" no significa que todo el proceso no se copia en absoluto, pero desde la perspectiva del kernel, evita copiar del espacio del kernel al espacio del usuario.

4. Partición

Los mensajes de Kafka se clasifican y almacenan por tema, y ​​los datos del tema se almacenan en diferentes nodos de intermediarios según una partición . Cada partición corresponde a una carpeta en el sistema operativo, y la partición se almacena en segmentos según los segmentos. Esto también está en consonancia con la idea de diseño de particiones y agrupaciones en sistemas distribuidos.

A través de este diseño dividido, los mensajes de Kafka se distribuyen y almacenan en un pequeño segmento, y cada operación de archivo es también un segmento de operación directa. Para una mayor optimización de la consulta, Kafka crea un archivo de índice para el archivo de datos segmentados de forma predeterminada, que es el archivo .index en el sistema de archivos. Este diseño de partición e índice no solo mejora la eficiencia de la lectura de datos, sino que también mejora el paralelismo de las operaciones de datos.

En resumen, Kafka utiliza diseños secuenciales de lectura y escritura, caché de página, copia cero y segmentación de particiones , junto con optimizaciones en la indexación , y la lectura y escritura de datos de Kafka también son lotes en lugar de simples, lo que hace que Kafka tenga un alto rendimiento. , Alto rendimiento, baja latencia .

Enlace original

Supongo que te gusta

Origin blog.csdn.net/a1036645146/article/details/109049569
Recomendado
Clasificación