¿Zookeeper es imprescindible para Kafka?

134

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?

Paaji
fuente
12
Uno de los mayores objetivos de diseño de Kafka son las implementaciones de clúster. Ese es el problema que están resolviendo, y sería una tontería hacer una versión sin zk para un servidor independiente. Tengo la sensación de que kafka no es la herramienta para su trabajo, pero que sería mejor simplemente usar un archivo de vainilla ...
RickyA
55
Realmente me encantaría saber lo que has finalizado. Como no eligió ninguna de las respuestas, supongo que tenía su propia solución para esto. Gracias !
Karthikeyan
Jocko es una implementación golang de Kafka sin dependencia de zookeeper e instalación binaria única
Arun Gopalpuri
1
Zookeeper ha sido eliminado, vea la respuesta a continuación - stackoverflow.com/a/57328140/1699956
Mangat Rai Modi
1
solo para agregar, si lees lo que hace zookeeper, obtendrás la ideaZookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
roottraveller

Respuestas:

128

Sí, se requiere Zookeeper para ejecutar Kafka. De la documentación de inicio de Kafka:

Paso 2: iniciar el servidor

Kafka usa Zookeeper, por lo que primero debe iniciar un servidor Zookeeper si aún no tiene uno. Puede usar la secuencia de comandos de conveniencia empaquetada con kafka para obtener una instancia de cuidador de zoológico de un solo nodo rápida y sucia.

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.

John Petrone
fuente
9
De hecho, kafka diseñado de una manera que incluso en el caso de un solo corredor , todavía está en modo distribuido, pero con un factor de replicación de 1: no habrá mecanismos de acceso directo o modo especial (y eso es bueno, en realidad).
om-nom-nom
2
Kafka 0.8.1 requiere zk. Y me pregunto, si no hay una capa abstracta en Kafka para trabajar con un sistema de coordinación, ¿cómo se puede habilitar otro sistema de coordinación para Kafka?
stanleyxu2005
Actualización importante stackoverflow.com/a/57328140/3438570
theodosis
64

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/

Kevin Li
fuente
3
¿Desea editar "la versión más reciente" en la versión real? Hace que su respuesta sea mejor.
akauppi
66
Copiaste
Junchen Liu el
Agrego la referencia, el último párrafo es originalmente mío.
Kevin Li
47

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".

Kai Wähner
fuente
17

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 .

Iskuskov Alexander
fuente
11

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 .

Santosh Rout
fuente
9

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:

Una vez que el quórum de Zookeeper está inactivo, los corredores podrían dar lugar a un mal estado y normalmente no podrían atender las solicitudes de los clientes, etc. Aunque cuando se recupere el quórum de Zookeeper, los corredores de Kafka deberían poder volver al estado normal automáticamente, todavía hay algunos casos de esquina no pueden y se requiere una matanza y recuperación duras para volver a la normalidad. Por lo tanto, se recomienda monitorear de cerca su clúster zookeeper y aprovisionarlo para que sea eficiente.

Para más detalles consultar aquí

usuario2720864
fuente
13
Zookeeper es un gran dolor de cabeza. En HBase En Kafka En tormenta Hay errores de larga data que conozco en Kafka / ZK que hicieron que mi equipo lo abandonara a favor de RabbitMQ. La instalación de HBase requiere tiempo para lidiar con los problemas de ZK. Sin embargo, su respuesta relacionada con el OP ES correcta: se requiere ZK.
javadba
2
Es cierto que hay problemas de compatibilidad de errores y versiones (al menos con Kafka y ZK), pero la intención principal de Zookeeper es administrar esas tareas complejas requeridas para cualquier sistema distribuido. Estoy de acuerdo en que administrar y ajustar su clúster zk requiere cierto esfuerzo y depende mucho en zk podría no ser una decisión inteligente. Probablemente por eso kafka está tratando de reducir las dependencias zk en versiones posteriores. En una nota diferente, creo que RabitMQ y Kafka tienen filosofías de diseño muy diferentes y su objetivo es resolver diferentes casos de uso, pero creo que está más allá del alcance de esta discusión :)
user2720864
Sí, kafka es superior para escenarios de alta carga. Decidimos hacer RabbitMQ hasta / a menos que claramente necesitemos esas ventajas. La programación en RabbitMQ también fue más fácil: existían dependencias difíciles de la versión scala para Kafka.
javadba
44
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.
RickyA
"Decidimos hacer RabbitMQ hasta / a menos que claramente necesitemos esas ventajas". Ojalá mi equipo estuviera iluminado así. En mi humilde opinión, claramente no tenemos una carga lo suficientemente alta como para justificar Kafka, pero de todos modos estamos usando Kafka :(
Mr Smith
4

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).

Shree
fuente
3

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.

CPATIL9767
fuente
3

Además de la transferencia de mensajes de carga útil habitual, hay muchas otras comunicaciones que ocurren en kafka, como

  • Eventos relacionados con corredores que solicitan la membresía del clúster.
  • Eventos relacionados con Brokers disponibles.
  • Obteniendo configuraciones de configuración de bootstrap.
  • Eventos relacionados con actualizaciones de controlador y líder.
  • Actualizaciones de estado de ayuda como actualizaciones de Heartbeat.

Zookeeper es un sistema distribuido que consta de múltiples nodos en un conjunto. Zookeeper es un servicio centralizado para mantener dichos metadatos.

Amulya Holla
fuente
1

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).

J. P
fuente
1

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 ...

tquadrat
fuente
0

en primer lugar

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.

En segundo lugar

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.

Zookeeper would work if there was even a single broker. 

Estos son del libro Kafka In Action . La imagen es de este curso.

fgul
fuente