Por que a pesquisa de mensagens geralmente falha durante o rebalanceamento?
O rebalanceamento é um processo em que partições de tópicos são realocadas para um grupo de consumidores.
Em casos normais, o rebalanceamento ocorre inevitavelmente quando um consumidor é adicionado ou removido de um grupo de consumidores. No entanto, se um consumidor for considerado anormal e removido do grupo de consumidores, a recuperação da mensagem poderá falhar.
Isso pode acontecer nos seguintes cenários:
- As solicitações de pulsação não são enviadas a tempo.
Um consumidor envia solicitações de pulsação ao agente no intervalo especificado por heartbeat.interval.ms. Se o agente não receber nenhuma solicitação de pulsação do consumidor dentro do período especificado por session.timeout.ms, o agente considera que o consumidor é anormal e remove o consumidor do grupo de consumidores, acionando o rebalanceamento.
- O intervalo entre as recuperações é muito longo.
O número máximo de mensagens que um consumidor pode recuperar por vez é especificado por max.poll.records. Na maioria dos casos, um cliente processa os dados recuperados antes de iniciar a próxima recuperação. O processamento pode ser prolongado quando um grande número de mensagens é recuperado de cada vez e não pode ser processado dentro do tempo especificado por max.poll.interval.ms ou quando ocorre uma exceção durante o processo (por exemplo, os dados precisam ser gravados no banco de dados de back-end, mas a pressão do banco de dados de back-end é muito alta, resultando em alta latência). Se o consumidor não enviar a próxima solicitação de recuperação dentro do prazo especificado por max.poll.interval.ms, o agente considera que o consumidor está inativo e o remove do grupo de consumidores, desencadeando o rebalanceamento.
Soluções e métodos de solução de problemas
Cenário 1: as solicitações de pulsação não são enviadas a tempo.
Solução: no cliente consumidor, defina o valor de session.timeout.ms como três vezes o valor de heartbeat.interval.ms.
Cenário 2: o intervalo entre as recuperações é muito longo.
Métodos de solução de problemas:
- Verifique o tempo necessário para processar uma única mensagem e se o tempo necessário para processar um número especificado (max.poll.records) de mensagens excede o tempo especificado por max.poll.interval.ms.
- Verifique se o processamento de mensagens requer conexões de rede, como gravar dados no banco de dados e chamar APIs de back-end, e se o back-end é normal em cenários de rebalanceamento.
Solução: no cliente consumidor, diminua o valor de max.poll.records.