message queue - ejemplo - ¿Cómo funciona el reequilibrio del consumidor en Kafka?
jms java tutorial (1)
Depende de lo que quieras decir con "bloqueado". Si quiere decir que "las conexiones existentes están cerradas cuando se activa el rebalanceo", entonces la respuesta es sí. El actual algoritmo de reequilibrio de Kafka desafortunadamente es imperfecto.
Esto es lo que está sucediendo durante el reequilibrio del consumidor.
Supongamos que tenemos un tema con 10 particiones (0-9) y un consumidor (llamémoslo consumer1
) que lo consume. Cuando aparece un segundo consumidor ( consumer2
), la tarea de reequilibrio se activa para ambos ( consumer1
obtiene un evento, consumer2
realiza el reequilibrio inicial). Ahora consumer1
cierra todas las conexiones existentes (incluso las que se volverán a abrir pronto) y libera la propiedad de la partición en Zookeeper para las 10 particiones.
Luego ejecuta el algoritmo de asignación de partición y decide qué particiones deben reclamarse y reclama la propiedad de la partición en Zookeeper nuevamente. Si la reclamación fue exitosa, consumer1
comienza a buscar sus nuevas particiones.
Mientras tanto, consumer2
ejecuta el algoritmo de asignación de particiones e intenta reclamar sus particiones en Zookeeper también. La reclamación tendrá éxito solo cuando consumer1
libere la propiedad de estas particiones. Cuando la reclamación es exitosa, consumer2
comienza a buscar, o si falla en reclamar particiones dentro de una cantidad determinada de reintentos, se produce un error de rebalance failed after n retries
excepciones de rebalance failed after n retries
.
Como se dio cuenta, en lugar de limitarse a cerrar las conexiones y liberar la propiedad de las particiones que consumer1
ya no posee, cierra innecesariamente TODAS sus conexiones y se reinicia con una cantidad menor de particiones. La misma historia con la adición de particiones (cuando consumimos por un filtro comodín y aparece un nuevo tema): TODAS las conexiones se cierran y luego se abren de nuevo en lugar de simplemente abrir nuevas.
Así que espero que esto responda a su pregunta: la recuperación se detiene cuando se activa el reequilibrio.
Cuando se agrega o baja un nuevo consumidor / brorker, Kafka activa una operación de reequilibrio. Es Kafka Reequilibrar una operación de bloqueo. ¿Están bloqueados los consumidores de Kafka mientras se está realizando una operación de reequilibrio?