Pergunta 31 de 50
O que é Replay?
Pergunta
"O que é Replay no Kafka?"
O que o entrevistador quer avaliar
Se você conecta replay a um caso de uso real (não só a definição técnica) e entende sua dependência da retenção.
Resposta rápida
Replay é mover a posição de leitura de um Consumer Group para um ponto anterior no log, reprocessando eventos que já haviam sido consumidos, ou lendo pela primeira vez eventos antigos, no caso de um Consumer Group novo.
Resposta nível Sênior
Tecnicamente, replay é resetar o offset commitado de um Consumer Group (via kafka-consumer-groups.sh ou
ferramenta equivalente) e deixar o consumer avançar normalmente a partir dali. Os três usos mais comuns:
corrigir um bug de processamento (corrigir o código e reprocessar o intervalo afetado), popular um sistema
novo com histórico existente (um Consumer Group novo lendo desde o início da retenção), e reconstruir um
estado derivado, como um índice de busca. O requisito não óbvio é que replay só funciona dentro da janela de
retenção, e que, em produção, exige que o consumer seja idempotente, porque ele vai reprocessar eventos
que já geraram efeitos colaterais na primeira vez.
Explicação aprofundada
Veja "Replay: reprocessando o que já foi lido" no Capítulo 8.
Exemplo financeiro
Um bug no extrato-service gerou lançamentos incorretos nos últimos 3 dias. Depois de corrigir o bug, o
time reseta o offset do Consumer Group para 3 dias atrás; o serviço reconstrói os lançamentos corretamente,
assumindo que a operação seja idempotente (um upsert por lançamento, não um incremento).
"Replay é só resetar o offset, sem mais consequências"
Resetar o offset é a parte fácil. Replay reprocessa eventos que já geraram efeitos colaterais na primeira vez: se o consumer não for idempotente, ele duplica esses efeitos (notificações, créditos, e-mails).
Pode vir a seguir
Prováveis follow-ups: "como o Kafka consegue reler mensagens já consumidas?" e "qual a diferença entre Replay e SQS DLQ Redrive?".
Capítulos relacionados