Quando o lag sobe, a reação mais comum é abrir chamado para o time de infra ou questionar o cluster.
Na maioria das vezes, o broker está perfeitamente saudável.
No post anterior, vimos por que muitas "mensagens perdidas" são, na verdade, falhas de processamento no consumer. Aqui, vamos para outro sintoma clássico: lag alto.
Conceito: o que é lag?
Lag é a diferença entre o último offset disponível no tópico (LEO) e o último offset que o consumer group confirmou (committed offset).
lag = LEO - committed offset
Ele responde apenas uma pergunta: "Quantas mensagens estão disponíveis, mas ainda não foram confirmadas?"
Ele não responde:
- Por que isso está acontecendo.
- Onde está o gargalo.
- Se o processamento está falhando ou só lento.
Lag é um indicador de atraso. O diagnóstico exige investigação.
Causas reais de lag alto (sem problema no broker)
-
Consumer lento: O producer publica mais rápido do que o consumer consegue processar. Pode ser lógica pesada, chamada externa lenta, ou simplesmente falta de instâncias.
-
Rebalance frequente: Toda vez que um consumer entra ou sai do grupo, o rebalance redistribui as partitions. Durante o rebalance, o consumo para. Se isso acontece com frequência, o lag acumula. Causas comuns: aplicação reiniciando, liveness probe mal configurado,
max.poll.interval.msestourado. -
Hot partition: Quando as mensagens não são distribuídas uniformemente entre partitions (por chave mal escolhida ou volume concentrado), algumas partitions ficam sobrecarregadas enquanto outras ficam ociosas. O consumer daquela partition específica acumula lag. As outras ficam zeradas. O problema parece pontual, mas é estrutural.
-
Consumer pausado ou travado: A instância está de pé, o heartbeat está ativo, mas o processamento parou: deadlock, espera por recurso externo, thread travada. O Kafka não sabe disso. O lag sobe silenciosamente.
-
Pico de volume esperado: Black Friday, fechamento de lote, processamento batch. O lag sobe e depois cai. Não é incidente, é comportamento previsto.
-
Escalar sem entender a causa: Adicionar mais pods é a solução mais rápida e quase sempre a errada.
Se o gargalo é uma hot partition, mais consumers não ajudam: você não pode ter mais consumers ativos do que partitions.
Se o problema é rebalance, mais pods aumentam a frequência de rebalances e pioram o lag.
Se é uma chamada externa lenta, mais consumers vão sobrecarregar esse serviço e possivelmente derrubá-lo.
Escalar resolve lag causado por volume genuíno. Para tudo o mais, é preciso entender antes de agir.
Como investigar antes de concluir
Antes de qualquer ação, responda a estas perguntas:
-
O lag está subindo continuamente ou oscilando? Subida contínua indica que o consumer não consegue acompanhar. Oscilação pode ser pico pontual ou rebalance.
-
O lag está em todas as partitions ou só em algumas? Lag concentrado em partitions específicas aponta para hot partition ou consumer travado naquela partition.
-
O consumer está processando? Qual é a taxa de consumo? Compare a taxa de publicação com a taxa de consumo. Se o producer publica
1.000 msg/se o consumer processa200 msg/s, o lag vai crescer indefinidamente. -
Houve rebalance recente? Verifique os logs do consumer group. Rebalances frequentes são sinal de instabilidade no consumer, não no broker.
-
Antes de escalar, a causa foi identificada? Mais pods só resolvem lag causado por volume genuíno. Se o problema é hot partition, rebalance ou dependência externa lenta, escalar não resolve e pode piorar.
Verifique se o número de consumers já é igual ao número de partitions. Se sim, adicionar pods não vai consumir nada a mais.
Atenção ao usar Spring Kafka: o parâmetro
concurrencydefine threads de consumo por instância.Se você tem 10 partitions, 3 pods e
concurrency=5, são 15 consumers competindo por 10 partitions.Os 5 excedentes ficam ociosos e ainda participam de cada rebalance, aumentando o tempo de pausa e piorando o lag que você tentava resolver.
- O broker está com métricas normais? Só depois de descartar as causas acima, olhe CPU, disco e rede do broker. Na maioria dos casos, ele está bem.
Regra de ouro
Lag alto significa que o consumer não está acompanhando o producer.
Antes de culpar o cluster, entenda quem está atrasado e por quê.
