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)

  1. 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.

  2. 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.ms estourado.

  3. 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.

  4. 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.

  5. Pico de volume esperado: Black Friday, fechamento de lote, processamento batch. O lag sobe e depois cai. Não é incidente, é comportamento previsto.

  6. 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/s e o consumer processa 200 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 concurrency define 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ê.