Pular para o conteúdo principal

Pergunta 28 de 50

O que é Commit?

PlenoSênior

Pergunta

"O que é Commit no contexto de um consumer Kafka?"

O que o entrevistador quer avaliar

Se você entende commit como o ato que oficializa o progresso de leitura — e a implicação disso quando o timing do commit está errado em relação ao processamento real.

Resposta rápida

Commit é a operação que registra, para um Consumer Group, até qual offset de uma partition já foi processado. Pode ser automático (o client comita periodicamente em background) ou manual (a aplicação decide exatamente quando comitar).

Resposta nível Sênior

O commit é o que separa "o client já entregou essa mensagem à aplicação" de "o Kafka considera essa mensagem processada para esse Consumer Group". Entre o momento em que uma mensagem é entregue e o momento em que o offset dela é commitado, existe uma janela onde, se o consumer cair, aquela mensagem pode ser reprocessada (se ainda não commitada) ou perdida (se commitada antes do processamento terminar). É esse timing — não a existência do commit em si — que determina se o consumer tende a perder ou duplicar mensagens sob falha.

Explicação aprofundada

Veja "Auto Commit" e "Commit Manual" no Capítulo 7.

Exemplo financeiro

O cobranca-service só chama acknowledgment.acknowledge() (comita o offset) depois de confirmar que a notificação de cobrança foi enviada e registrada no banco — garantindo que uma falha no meio do processo resulte em reprocessamento, nunca em perda silenciosa do boleto.

"Commit e leitura são a mesma coisa"

Não — um consumer pode ler (e até processar) uma mensagem sem nunca comitar o offset dela, se cair antes. Nesse caso, a próxima inicialização do consumer vai reler a mesma mensagem, porque o commit nunca aconteceu.

Pode vir a seguir

Prováveis follow-ups: "qual a diferença entre Auto Commit e Manual Commit?" e "o que é Retention Period?".

Capítulos relacionados