En Kafka, me gustaría usar solo un único corredor, un solo tema y una única partición que tenga un productor y múltiples consumidores (cada consumidor obtiene su propia copia de los datos del corredor). Dado esto, no quiero la sobrecarga de usar Zookeeper; ¿No puedo usar solo el corredor solamente? ¿Por qué es un Zookeeper debe?
134
Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
Respuestas:
Sí, se requiere Zookeeper para ejecutar Kafka. De la documentación de inicio de Kafka:
En cuanto a por qué, hace mucho tiempo la gente descubrió que necesita tener alguna forma de coordinar tareas, administración de estado, configuración, etc. a través de un sistema distribuido. Algunos proyectos han creado sus propios mecanismos (piense en el servidor de configuración en un clúster fragmentado MongoDB o en un nodo maestro en un clúster Elasticsearch). Otros han optado por aprovechar Zookeeper como un sistema de coordinación de procesos distribuidos de propósito general. Así que Kafka, Storm, HBase, SolrCloud, por nombrar algunos, usan Zookeeper para ayudar a administrar y coordinar.
Kafka es un sistema distribuido y está diseñado para usar Zookeeper. El hecho de que no esté utilizando ninguna de las características distribuidas de Kafka no cambia la forma en que se creó. En cualquier caso, no debería haber mucha sobrecarga por usar Zookeeper. Una pregunta más importante es por qué usaría este patrón de diseño en particular: una implementación de un solo agente de Kafka pierde todas las características de confiabilidad de un clúster de varios agentes junto con su capacidad de escalar.
fuente
Como explicaron otros, Kafka (incluso en la versión más reciente) no funcionará sin Zookeeper.
Kafka usa Zookeeper para lo siguiente:
Elegir un controlador . El controlador es uno de los corredores y es responsable de mantener la relación líder / seguidor para todas las particiones. Cuando un nodo se apaga, es el controlador el que le dice a otras réplicas que se conviertan en líderes de partición para reemplazar a los líderes de partición en el nodo que está desapareciendo. Zookeeper se usa para elegir un controlador, asegúrese de que solo haya uno y elija uno nuevo si falla.
Membresía del clúster : ¿qué corredores están vivos y son parte del clúster? Esto también se gestiona a través de ZooKeeper.
Configuración del tema : qué temas existen, cuántas particiones tiene cada uno, dónde están las réplicas, quién es el líder preferido, qué anulaciones de configuración se establecen para cada tema
(0.9.0) - Cuotas : cuántos datos se le permite a cada cliente leer y escribir
(0.9.0) - ACL : quién puede leer y escribir sobre qué tema (antiguo consumidor de alto nivel): qué grupos de consumidores existen, quiénes son sus miembros y cuál es el último desplazamiento que cada grupo obtuvo de cada partición.
[de https://www.quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafka/answer/Gwen-Shapira ]
Con respecto a su escenario, solo una instancia de corredor y un productor con múltiples consumidores, puede usar el impulsor para crear un canal y enviar un evento a ese canal al que el consumidor puede suscribirse y entregar esos eventos. https://pusher.com/
fuente
Actualización importante - agosto de 2019:
La dependencia de ZooKeeper se eliminará de Apache Kafka . Vea la discusión de alto nivel en KIP-500 : Reemplace ZooKeeper con un quórum de metadatos autogestionados .
Estos esfuerzos requerirán algunos lanzamientos de Kafka y KIP adicionales. Kafka Controllers asumirá las tareas de las tareas actuales de ZooKeeper. Los Controladores aprovecharán los beneficios del Registro de eventos, que es un concepto central de Kafka.
Algunos beneficios de la nueva arquitectura Kafka son una arquitectura más simple, facilidad de operaciones y mejor escalabilidad (por ejemplo, permitir "particiones ilimitadas".
fuente
Actualizado el jul 2020
Para la última versión (2.5.0), ZooKeeper todavía es necesario para ejecutar Kafka, pero en un futuro cercano ZooKeeper será reemplazado por un Quórum de metadatos autogestionados .
Ver detalles en el KIP-500 aceptado .
fuente
Kafka está diseñado para usar Zookeeper. No hay escapatoria de eso.
Kafka es un sistema distribuido y utiliza Zookeeper para rastrear el estado de los nodos del clúster kafka. También realiza un seguimiento de los temas, particiones, etc. de Kafka.
Mirando su pregunta, parece que no necesita Kafka. Puede usar cualquier aplicación que admita pub-sub como Redis , Rabbit MQ o soluciones alojadas como Pub-nub .
fuente
En mi humilde opinión Zookeeper no es una sobrecarga, pero hace que tu vida sea mucho más fácil.
Básicamente se utiliza para mantener la coordinación entre diferentes nodos en un clúster. Una de las cosas más importantes para Kafka es que utiliza el cuidador del zoológico para confirmar periódicamente las compensaciones, de modo que en caso de falla del nodo pueda reanudarse de la compensación previamente comprometida (imagínese cuidando todo esto por su cuenta).
Zookeeper también juega un papel vital para cumplir muchos otros propósitos, como la detección de líderes, la gestión de la configuración, la sincronización, la detección de un nuevo nodo que se une o abandona el clúster, etc.
Las futuras versiones de Kafka planean eliminar la dependencia del cuidador del zoológico, pero a partir de ahora es una parte integral de la misma.
Aquí hay algunas líneas tomadas de su página de preguntas frecuentes:
Para más detalles consultar aquí
fuente
IMHO zookeeper is not an overhead but makes your life a lot easier.
-> no desde la vista de un sysop. Zk es una pieza de retroceso de java cruft. Por ejemplo, tiene un error sobresaliente durante mucho tiempo, ya que no se adhiere al ttl de una entrada dns, por lo que no volverá a resolver una entrada. Fuera de la ventana se abren las posibilidades de intercambio de su servidor. Lo cambiaría felizmente por etcd.Zookeeper es un sistema centralizador y de gestión para cualquier tipo de sistema distribuido. El sistema distribuido es diferentes módulos de software que se ejecutan en diferentes nodos / clústeres (pueden estar en ubicaciones geográficamente distantes) pero que se ejecutan como un solo sistema. Zookeeper facilita la comunicación entre los nodos, compartiendo configuraciones entre los nodos, realiza un seguimiento de qué nodo es líder, qué nodo se une / sale, etc. Zookeeper es el que mantiene los sistemas distribuidos sanos y mantiene la coherencia. Zookeeper es básicamente una plataforma de orquestación.
Kafka es un sistema distribuido . Y, por lo tanto, necesita algún tipo de orquestación para sus nodos que pueda estar geográficamente distante (o no).
fuente
Sí, Zookeeper es imprescindible por diseño para Kafka. Porque Zookeeper tiene la responsabilidad de administrar un clúster de Kafka. Tiene una lista de todos los corredores Kafka con él. Notifica a Kafka, si algún corredor se cae, o la partición se cae o si el nuevo corredor está arriba o la partición está arriba. En resumen, ZK mantiene actualizado a cada agente de Kafka sobre el estado actual del clúster de Kafka.
Entonces, todo cliente de Kafka (productor / consumidor) todo lo que tiene que hacer es conectarse con cualquier corredor individual y ese corredor tiene todos los metadatos actualizados por Zookeeper, por lo que el cliente no debe preocuparse por el dolor de cabeza de descubrimiento del corredor.
fuente
Además de la transferencia de mensajes de carga útil habitual, hay muchas otras comunicaciones que ocurren en kafka, como
Zookeeper es un sistema distribuido que consta de múltiples nodos en un conjunto. Zookeeper es un servicio centralizado para mantener dichos metadatos.
fuente
Este artículo explica el papel de Zookeeper en Kafka. Explica cómo kafka no tiene estado y cómo zookeper juega un papel importante en la naturaleza distribuida de kafka (y muchos más sistemas distribuidos).
fuente
La solicitud de ejecutar Kafka sin Zookeeper parece ser bastante común. La biblioteca Charlatán aborda esto.
Según la descripción, Charlatan es más o menos una burla para Zookeeper, ya que proporciona los servicios de Zookeeper ya sea respaldados por otras herramientas o por una base de datos.
Encontré esa biblioteca cuando trataba con el producto principal de los autores para la biblioteca Charlatán; allí funciona bien ...
fuente
Apache ZooKeeper es una tienda distribuida que se utiliza para proporcionar servicios de configuración y sincronización en una alta disponibilidad. En las versiones más recientes de Kafka, se trabajó para que los consumidores clientes no almacenaran información sobre cuánto había consumido mensajes (llamados compensaciones) en ZooKeeper.
.This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.
Mientras Kafka proporciona tolerancia a fallas y resistencia , se necesita algo para proporcionar el se necesita coordinación y ZooKeeper habilita esa parte del sistema general.Acordar quién es el líder de una partición es un ejemplo de la aplicación práctica de ZooKeeper dentro del ecosistema Kafka.
Estos son del libro Kafka In Action . La imagen es de este curso.
fuente