¿Por qué la encuesta de mensaje siempre falla durante el reequilibrio?
El reequilibrio es un proceso en el que se reasignan las particiones de temas para un grupo de consumidores.
En casos normales, el reequilibrio se produce inevitablemente cuando un consumidor es agregado o quitado de un grupo de consumidores. Sin embargo, si un consumidor se considera anormal y se quita del grupo de consumidores, la recuperación del mensaje puede fallar.
Esto puede ocurrir en los siguientes escenarios:
- Las solicitudes de latido no se envían a tiempo.
Un consumidor envía solicitudes de latidos al broker en el intervalo especificado por heartbeat.interval.ms. Si el corredor no recibe ninguna solicitud de latido del consumidor dentro del período especificado por session.timeout.ms, el broker considera que el consumidor es anormal y lo elimina del grupo de consumidores, lo que desencadena un reequilibrio.
- El intervalo entre recuperaciones es demasiado largo.
max.poll.records especifica el número máximo de mensajes que un consumidor puede recuperar a la vez. En la mayoría de los casos, un cliente procesa los datos recuperados antes de iniciar la siguiente recuperación. El procesamiento puede prolongarse cuando se recupera un gran número de mensajes a la vez y no se puede procesar dentro del tiempo especificado por max.poll.interval.ms o cuando se produce una excepción durante el proceso. (por ejemplo, los datos deben escribirse en la base de datos backend, pero la presión de la base de datos backend es demasiado alta, lo que resulta en una alta latencia). Si el consumidor no envía la siguiente solicitud de recuperación dentro del tiempo especificado por max.poll.interval.ms, el broker considera que el consumidor está inactivo y lo elimina del grupo de consumidores, desencadenando un reequilibrio.
Soluciones y métodos de solución de problemas
Escenario 1: Las solicitudes de latido no se envían a tiempo.
Solución: En el cliente consumidor, establezca el valor de session.timeout.ms en tres veces el valor de heartbeat.interval.ms.
Escenario 2: El intervalo entre recuperaciones es demasiado largo.
Métodos de solución de problemas:
- Compruebe el tiempo necesario para procesar un solo mensaje y si el tiempo necesario para procesar un número específico (max.poll.records) de mensajes excede el tiempo especificado por el max.poll.interval.ms.
- Compruebe si el procesamiento de mensajes requiere conexiones de red, como escribir datos en la base de datos e invocar a las API de backend, y si el backend es normal en escenarios de reequilibrio.
Solución: En el cliente consumidor, disminuya el valor de max.poll.records.