Pular para o conteúdo principal

Pergunta 32 de 50

Como o Kafka consegue reler mensagens consumidas?

Sênior

Pergunta

"Tecnicamente, como o Kafka consegue reler mensagens que já foram consumidas?"

O que o entrevistador quer avaliar

Se você entende o mecanismo real por trás do replay — a resposta correta é sobre a natureza do log, não sobre um recurso "mágico" separado.

Resposta rápida

Porque consumir uma mensagem não a remove do log — diferente de uma fila tradicional, o Kafka mantém a mensagem retida (até expirar pela política de retenção) independentemente de ter sido lida. Reler é apenas mover o offset commitado do Consumer Group de volta para uma posição anterior.

Resposta nível Sênior

Não existe um mecanismo separado de "replay" no Kafka — ele é uma consequência direta de como o log funciona. Uma partition é uma sequência imutável de registros identificados por offset; consumir uma mensagem só avança a posição de leitura do consumer (e, se commitado, a posição oficial do Consumer Group). A mensagem em si continua no disco do broker, disponível para qualquer leitura futura, até a política de retenção descartá-la. Portanto, "reler" é simplesmente instruir o consumer (ou um novo Consumer Group) a buscar a partir de um offset anterior — o client Kafka então volta a ler exatamente a partir dali, como se nunca tivesse avançado.

Explicação aprofundada

Veja "Replay: reprocessando o que já foi lido" no Capítulo 8.

Exemplo financeiro

Reconstruir o índice do Elasticsearch usado para busca de transações é feito criando um novo Consumer Group com auto.offset.reset=earliest — ele lê o tópico inteiro desde o início da retenção disponível, reconstruindo o índice do zero, sem nenhuma ação especial do lado do producer.

"O Kafka guarda uma cópia separada para permitir replay"

Não existe cópia separada — é a mesma partition, o mesmo log. Replay não duplica dados nem usa um mecanismo paralelo; ele só reposiciona onde o consumer começa a ler dentro do log que já existe.

Pode vir a seguir

Prováveis follow-ups: "o que acontece se eu tentar reler algo que já expirou pela retenção?" e "qual a diferença entre Replay e SQS DLQ Redrive?".

Capítulos relacionados