Consumidores do mesmo grupo processam mensagens em velocidades distintas entre as partições, o que faz com que algumas fiquem atrasadas em relação às outras. Isso geralmente ocorre quando o número de partições não é divisível uniformemente pela quantidade de consumidores, resultando em uma distribuição desequilibrada da carga de trabalho.
Diagnosticar o problema
Faça login no console do ApsaraMQ for Kafka.
Na página Groups, clique em nome do grupo desejado.
Na página Group Details, clique em aba Consumer Status.
Na coluna Actions do tópico correspondente, clique em Consumer Details.
Compare os valores de Maximum Offset entre as partições. Uma partição com Maximum Offset significativamente maior recebeu mensagens do produtor antes das demais, indicando progresso de consumo desigual.
Causa raiz
O ApsaraMQ for Kafka distribui as partições entre os consumidores de um grupo da forma mais equilibrada possível. Quando o total de partições é divisível exatamente pelo número de consumidores, cada um recebe a mesma quantidade de partições. Caso contrário, alguns consumidores assumem mais partições que os outros e processam as mensagens mais lentamente.
Exemplo: Um tópico possui 12 partições e um grupo de consumidores tem 5 instâncias. A distribuição das partições ocorre da seguinte forma:
|
Consumidor |
Partições atribuídas |
|
Consumidor 1 |
3 |
|
Consumidor 2 |
3 |
|
Consumidor 3 |
2 |
|
Consumidor 4 |
2 |
|
Consumidor 5 |
2 |
Se todos os cinco consumidores tiverem a mesma capacidade de processamento, o Consumidor 1 e o Consumidor 2 ficarão atrasados, pois lidam com 50% mais partições que os demais.
O número padrão de partições é 12 para instâncias do ApsaraMQ for Kafka por assinatura e pagamento conforme o uso, e 3 para instâncias serverless.
Solução
Alinhar o número de partições ao número de consumidores
Garanta que a quantidade de partições seja divisível uniformemente pelo número de consumidores.
|
Número de partições |
Opções de quantidade de consumidores (distribuição uniforme) |
|
12 (padrão) |
1, 2, 3, 4, 6 ou 12 |
|
3 (padrão serverless) |
1 ou 3 |
Por exemplo, com 12 partições, utilize 3, 4, 6 ou 12 consumidores — evite usar 5, 7 ou 8.
Considerações adicionais
Capacidade de processamento desigual: Mesmo com uma proporção divisível uniformemente entre partições e consumidores, podem surgir atrasos se houver diferenças individuais na velocidade de processamento — causadas, por exemplo, por latência de rede, limitação de recursos ou dependências downstream lentas. Monitore o throughput de cada consumidor para identificar gargalos.
Acompanhe o atraso do grupo de consumidores: Utilize a métrica de lag do grupo (diferença entre o offset produzido mais recente e o offset confirmado pelo consumidor em cada partição) para detectar desequilíbrios proativamente.