poll partitions kafka interval example auto_offset_reset apache-kafka kafka-consumer-api

apache-kafka - partitions - max poll interval ms



¿Qué significa "reequilibrio" en el contexto de Apache Kafka? (2)

A cada consumidor en un grupo de consumidores se le asigna una o más particiones temáticas exclusivamente, y Rebalance es la reasignación de propiedad de partición entre los consumidores.

Un reequilibrio ocurre cuando:

  • un consumidor se une al grupo
  • un consumidor se apaga limpiamente
  • un consumidor es considerado MUERTO por el coordinador del grupo. Esto puede suceder después de un bloqueo o cuando el consumidor está ocupado con un procesamiento de larga duración, lo que significa que el consumidor no ha enviado ningún latido al coordinador de grupo dentro del intervalo de sesión configurado.
  • Se agregan nuevas particiones


Al ser un coordinador de grupo (uno de los intermediarios en el grupo) y un líder de grupo (el primer consumidor que se une a un grupo) designado para un grupo de consumidores, Rebalance se puede describir más o menos como sigue:

  • el líder recibe una lista de todos los consumidores en el grupo del coordinador del grupo (esto incluirá a todos los consumidores que enviaron un latido recientemente y que, por lo tanto, se consideran vivos) y es responsable de asignar un subconjunto de particiones a cada consumidor.
  • Después de decidir la asignación de partición (Kafka tiene un par de políticas de asignación de partición integradas), el líder del grupo envía la lista de asignaciones al coordinador del grupo , que envía esta información a todos los consumidores.


Esto se aplica a Kafka 0.9, pero estoy seguro de que para las versiones más recientes sigue siendo válido.

Soy un usuario nuevo de Kafka y lo he estado probando durante 2 o 3 semanas. Creo que en este momento entiendo bien cómo funciona Kafka en su mayor parte, pero después de intentar ajustar la API para mi propio consumidor de Kafka (esto es poco claro, pero estoy siguiendo las pautas para el nuevo KafkaConsumer que se supone que debe Estar disponible para v 0.9, que está disponible en el repositorio de la ''troncal''). He tenido problemas de latencia desde un tema si tengo varios consumidores con el mismo ID de grupo.

En esta configuración, mi consola constantemente registra los problemas relacionados con un ''desencadenamiento de rebalanceo''. ¿Ocurren rebalances cuando agrego nuevos consumidores a un grupo de consumidores y se activan para determinar qué instancia del consumidor en el mismo groupID obtendrá qué particiones o rebalances se usan para algo completamente distinto?

También encontré este pasaje de https://cwiki.apache.org/confluence/display/KAFKA/Kafka+0.9+Consumer+Rewrite+Design y parece que no puedo entenderlo, así que si alguien me puede ayudar a crear sentido de ello que sería muy apreciado:

El reequilibrio es el proceso en el que un grupo de instancias de consumidores (que pertenecen al mismo grupo) se coordinan para poseer un conjunto de particiones de temas mutuamente excluyentes al que se suscribe el grupo. Al final de una operación exitosa de reequilibrio para un grupo de consumidores, cada partición para todos los temas suscritos será propiedad de una sola instancia de consumidor dentro del grupo. La forma en que funciona el rebalanceo es la siguiente. Cada corredor es elegido como coordinador de un subconjunto de los grupos de consumidores. El agente coordinador de un grupo es responsable de organizar una operación de reequilibrio en los cambios de pertenencia a grupos de consumidores o cambios de partición para los temas suscritos. También es responsable de comunicar la configuración de propiedad de la partición resultante a todos los consumidores del grupo que realiza una operación de reequilibrio.


Cuando un nuevo consumidor se une a un grupo de consumidores, el conjunto de consumidores intenta "rebalancear" la carga para asignar particiones a cada consumidor. Si el conjunto de consumidores cambia mientras se lleva a cabo esta asignación, el reequilibrio fallará y se volverá a intentar. Esta configuración controla el número máximo de intentos antes de renunciar.

el comando para esto es: rebalance.max.retries y se establece en 4 de forma predeterminada.

También, podría estar sucediendo si lo siguiente es cierto:

Tiempo de espera de sesión de ZooKeeper. Si el consumidor no le da un latido al ZooKeeper durante este período de tiempo, se considera muerto y se producirá un nuevo equilibrio.

¡Espero que esto ayude!