zoológico zoologico zabinski wife the reparto guardián guardian donald doblaje canciones cancion boda antonina apache-zookeeper apache-kafka

apache zookeeper - zoologico - ¿Por qué los consumidores de Kafka se conectan con el cuidador del zoológico y los productores obtienen metadatos de los corredores?



el guardián del zoológico reparto (2)

¿Por qué es que los consumidores se conectan a Zookeeper para recuperar las ubicaciones de partición? Y los productores de kafka tienen que conectarse a uno de los corredores para recuperar metadatos.

Mi punto es, ¿cuál es exactamente el uso de zookeeper cuando cada corredor ya tiene todos los metadatos necesarios para decirle a los productores la ubicación para enviar sus mensajes? ¿No podrían los corredores enviar esta misma información a los consumidores?

Puedo entender por qué los corredores tienen los metadatos, para no tener que hacer una conexión con Zookeeper cada vez que se les envía un nuevo mensaje. ¿Hay una función que el guardián del zoológico tiene que me estoy perdiendo? Me resulta difícil pensar en una razón por la que realmente se necesita un guardián del zoológico dentro de un clúster kafka.


Con kafka 0.9+ se introdujo la nueva API para el consumidor. Los nuevos consumidores no necesitan conexión con Zookeeper ya que el equilibrio de grupo lo proporciona el propio kafka.


En primer lugar, zookeeper es necesario solo para consumidores de alto nivel. SimpleConsumer no requiere que SimpleConsumer trabaje.

La razón principal por la que se necesita un cuidador del zoológico para un consumidor de alto nivel es hacer un seguimiento de las compensaciones consumidas y manejar el equilibrio de carga.

Ahora con más detalle.

Con respecto al seguimiento de desplazamiento, imagine el siguiente escenario: usted inicia un consumidor, consume 100 mensajes y apaga al consumidor. La próxima vez que inicie su consumidor, probablemente querrá reanudar desde su último desplazamiento consumido (que es 100), y eso significa que debe almacenar el desplazamiento consumido máximo en algún lugar. Aquí es donde entra el zookeeper: almacena las compensaciones para cada grupo / tema / partición. Entonces, la próxima vez que inicie su consumo, puede preguntar "hey zookeeper, ¿cuál es la compensación que debería comenzar a consumir?". Kafka se está moviendo hacia la posibilidad de almacenar las compensaciones no solo en el guardián del zoológico, sino también en otros almacenes (por ahora solo están disponibles los almacenamientos del zookeeper y del kafka y no estoy seguro de que el almacenamiento de kafka esté completamente implementado).

Con respecto al equilibrio de carga, la cantidad de mensajes producidos puede ser bastante grande para ser manejada por 1 máquina y probablemente querrá agregar potencia de cálculo en algún momento. Digamos que tienes un tema con 100 particiones y para manejar esta cantidad de mensajes tienes 10 máquinas. Hay varias preguntas que surgen aquí en realidad:

  • ¿Cómo deberían estas 10 máquinas dividir las particiones entre sí?
  • ¿Qué pasa si una de las máquinas muere?
  • ¿Qué pasa si quieres agregar otra máquina?

Y nuevamente, aquí es donde entra el zookeeper: rastrea a todos los consumidores en grupo y cada consumidor de alto nivel está suscrito para los cambios en este grupo. El punto es que cuando un consumidor aparece o desaparece, Zookeeper notifica a todos los consumidores y desencadena el rebalanceo para que dividan las particiones de manera casi igual (por ejemplo, para equilibrar la carga). De esta manera se garantiza que si uno de los consumidores muere, otros continuarán procesando las particiones que eran propiedad de este consumidor.