[Kafka de la serie 6 de la entrada al abandono] Arquitectura de Kafka en profundidad-alta lectura y escritura concurrentes y gestión de Zookeeper

Después de comprender [Kafka de la serie de entrada al abandono 4] la estrategia de producción en profundidad de la arquitectura Kafka y [Kafka de la serie de entrada a la serie 5 del abandono] la estrategia de consumidor en profundidad de la arquitectura Kafka , entendamos cómo se gestiona Zookeeper.

Kafka lee y escribe datos de manera eficiente

¿Cómo garantiza Kafka una lectura y escritura de datos eficientes? Hay tres puntos de apoyo: lectura y escritura distribuida, escritura secuencial en disco y tecnología de copia cero . De hecho, los dos primeros puntos también se mencionan en el blog anterior.

  • Lectura y escritura distribuidas , las diversas estrategias que mencionamos son para satisfacer la lectura y escritura distribuidas, confiables y eficientes.
  • Escribir en el disco secuencialmente . El productor de Kafka produce datos que se escribirán en el archivo de registro. El proceso de escritura consiste en añadirlos al final del archivo, que es escritura secuencial. Para el mismo disco, la escritura secuencial puede alcanzar los 600 M / s, mientras que la escritura aleatoria es de solo 100 K / s. Esto está relacionado con el mecanismo mecánico del disco La razón por la que la escritura secuencial es rápida es que ahorra mucho tiempo de direccionamiento de cabeza .
  • La tecnología de copia cero , en términos simples, es que los datos no necesitan pasar por el modo de usuario. Para conocer los principios detallados, consulte cómo Kafka usa copia cero para mejorar el rendimiento.

La alta lectura y escritura simultáneas de Kafka se puede lograr a través de las tecnologías anteriores

Gestión del cuidador del zoológico

En una cola de mensajes distribuidos basada en Kafka, las funciones de ZooKeeper incluyen: registro de intermediarios, registro de temas, equilibrio de carga de productores y consumidores, mantenimiento de la relación entre la partición y el consumidor, registro del progreso del consumo de mensajes y registro del consumidor .
Inserte la descripción de la imagen aquí

Agente de registro

El broker está registrado en zookeeper Recuerde que cuando se construyó el clúster distribuido, el nodo de servicio que agregamos al archivo de configuración zk se usó para registrar el broker.

  • Para registrar la información de registro de los corredores , se creó un nodo perteneciente a Kafka en ZooKeeper, y su ruta es / brokers
  • Cuando cada corredor de Kafka se inicia, se registrará en ZooKeeper, le dirá a ZooKeeper su broker.id, en todo el clúster, broker.id debe ser globalmente único y creará su propio nodo en ZooKeeper , su ruta de nodo es /brokers/ids/{broker.id};
  • Una vez creado el nodo, Kafka registrará el nombre del intermediario y el número de puerto del intermediario en el nodo;
  • Además, el atributo del nodo broker es un nodo temporal, cuando falla la sesión del broker, ZooKeeper borrará el nodo, de esta manera podemos monitorear fácilmente los cambios del nodo broker y ajustar el balance de carga en el tiempo.
    Inserte la descripción de la imagen aquí
    Por supuesto, después de registrar al corredor, también debe registrar el tema.

Registrar tema

En Kafka, toda la correspondencia entre los temas y los corredores es mantenida por ZooKeeper En ZooKeeper, se establece un nodo especial para registrar esta información, y la ruta del nodo es /brokers/topics/{topic_name}. Como se mencionó anteriormente, para garantizar la confiabilidad de los datos, cada Partición de tema tiene una copia de seguridad, y la cantidad de copias de seguridad está controlada por las réplicas en el mecanismo de Kafka.

  • Líder electoral , Kafka encuentra un nodo para cada partición como líder y el resto como seguidor.
  • Sincronización de réplicas Cuando el mensaje de empuje del productor se escribe en la partición, el intermediario (nodo Kafka) como líder escribirá el mensaje en su propia partición y, al mismo tiempo, copiará el mensaje a cada seguidor para lograr la sincronización .
  • Mantener ISR . Si un seguidor cae, el líder encontrará otro reemplazo y sincronizará los mensajes.
  • Reelegir al líder . Si el líder falla, los seguidores elegirán un nuevo líder para reemplazar y continuar con el negocio.

Todas estas operaciones las realiza el cuidador del zoológico.

Registrar consumidor

¿Cuáles son los trabajos que hace el cuidador del zoológico en el lado del consumidor?

  • Registrar un nuevo grupo de consumidores . Cuando el nuevo grupo de consumidores se registre en ZooKeeper, ZooKeeper creará un nodo dedicado para guardar la información relacionada. La ruta del nodo es /consumers/{group_id}. Hay tres subnodos debajo del nodo, a saber, [ids, owner, offsets ]. nodo ids: registra los consumidores actuales en el grupo de consumidores; nodo de propietarios: registra la información del tema consumida por el grupo de consumidores; nodo de compensaciones: registra el desplazamiento de cada partición de cada tema . Por supuesto, la nueva versión no está registrada en zookeeper.
  • Registrar un nuevo consumidor Cuando se registra un nuevo consumidor en Kafka, se creará un nodo secundario temporal en el nodo / consumidores / {group_id} / ids y se registrará la información relacionada.
  • Para monitorear los cambios de consumidores en el grupo de consumidores , cada consumidor debe prestar atención a los cambios en el número de consumidores en el grupo de consumidores al que pertenece, es decir, monitorear los cambios en los nodos secundarios en / consumidores / {group_id} / ids. Tan pronto como se descubra que los consumidores han agregado o disminuido, se activará el equilibrio de carga de los consumidores.

De hecho, no solo el registro de consumidores, sino también la gestión de estrategias de consumo.

Balanceo de carga de productores

Para diferentes particiones del mismo tema, Kafka intentará distribuir estas particiones a diferentes servidores de intermediarios.Esta estrategia de equilibrio se implementa en realidad en base a ZooKeeper .

  • Para monitorear los cambios de los intermediarios , después de que se inicien los productores, deben registrarse en ZooKeeper y crear un nodo temporal para monitorear los cambios en la lista de servidores de los intermediarios. Debido a que los corredores creados bajo ZooKeeper también son nodos temporales, cuando los corredores cambian, los productores pueden recibir notificaciones relevantes al cambiar su lista de corredores.
  • El monitoreo de los cambios de tema , los cambios de tema y los cambios en la relación entre el corredor y el tema también se implementan a través del monitoreo de Watcher de ZooKeeper.

Cuando el corredor cambia y el tema cambia, zookeeper puede monitorear y controlar la distribución de mensajes y particiones.

Equilibrio de carga del consumidor

Cuando los consumidores comiencen, irán a ZooKeeper para crear nodos temporales con su propio usuario-id /consumer/[group-id]/ids/[conusmer-id], y registrarán / consumidor / [grupo-id] / ids para monitorear eventos:

  • Monitorear la lista de consumidores Cuando un consumidor cambia, se notificará al resto de consumidores del mismo grupo.
  • Para monitorear la lista de corredores , los consumidores también monitorean los cambios en la lista de corredores.

Luego siga las estrategias que mencionamos antes para ordenar y consumir

Registre el progreso del consumo Offset

Cuando el consumidor consume los mensajes de la partición de mensajes especificada, es necesario registrar periódicamente el progreso del consumo. Desplazamiento del mensaje de la partición a ZooKeeper, de modo que después de que el consumidor reinicie u otros consumidores vuelvan a asumir el derecho de consumo de mensajes de la partición de mensajes, pueda Continuar consumiendo mensajes del progreso anterior. Por supuesto, ahora se recomienda grabar sobre un tema específico .

Registrar la relación entre la partición y el consumidor

Hay varios consumidores (consumidores) en el grupo de consumidores. Para cada grupo de consumidores, Kafka le asignará un ID de grupo único a nivel mundial. Todos los consumidores del grupo comparten este ID. Cada partición del tema suscrito solo se puede asignar a un consumidor de un grupo determinado (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.

  • Registrar la relación entre la partición y el consumidor . En Kafka, se estipula que cada partición solo puede ser consumida por un consumidor del mismo grupo. Por lo tanto, es necesario registrar la relación entre la partición y el consumidor en ZooKeeper.

Una vez que cada consumidor ha determinado su consumo de energía para una partición, debe escribir su ID de consumidor en el nodo temporal de la partición de mensajes correspondiente de ZooKeeper.

Parte del contenido proviene de: https://gitbook.cn/books/5ae1e77197c22f130e67ec4e/index.html

Supongo que te gusta

Origin blog.csdn.net/sinat_33087001/article/details/108398136
Recomendado
Clasificación