Pergunta 40 de 50
O que é Exactly Once?
Pergunta
"O que é Exactly Once no Kafka? Ele elimina de vez o problema de duplicidade?"
O que o entrevistador quer avaliar
A pegadinha mais importante desta seção do livro — testa se o candidato entende o escopo exato dessa garantia, não apenas seu nome.
Resposta rápida
Exactly Once significa que a mensagem é processada exatamente uma vez, sem perda nem duplicação — via producer idempotente e transações. Mas essa garantia cobre o fluxo Kafka-para-Kafka; qualquer efeito colateral fora do Kafka (banco de dados, chamada HTTP, e-mail) continua exigindo idempotência própria.
Resposta nível Sênior
Exactly-once semantics (EOS) do Kafka usa producer idempotente (enable.idempotence=true, que evita
duplicação causada por retries automáticos do próprio producer) combinado com transações
(KafkaTransactionManager), garantindo que ler de um tópico, processar, e escrever em outro tópico aconteça
como uma unidade atômica. Isso é real e funciona — mas só dentro do ecossistema Kafka. No momento em que o
processamento inclui uma escrita em um banco de dados externo ou uma chamada a uma API, essa escrita fica
fora da transação Kafka, e uma falha exatamente ali ainda pode gerar duplicidade desse efeito externo. Por
isso, mesmo usando exactly-once semantics, sistemas que integram Kafka com bancos e APIs externas continuam
precisando de idempotência nessas integrações.
Explicação aprofundada
Veja "Exactly Once: o que ela cobre e o que não cobre" no Capítulo 10.
Exemplo financeiro
Um consumer que lê de um tópico, transforma o dado e escreve em outro tópico Kafka pode usar exactly-once semantics com segurança total. Mas se esse mesmo consumer também grava o resultado em um banco relacional, essa escrita específica continua exigindo uma checagem de idempotência própria (Capítulo 11) — o exactly-once do Kafka não a protege.
"Exactly Once significa que a mensagem nunca é processada duas vezes, ponto final"
Essa é a resposta que reprova em entrevistas sênior. A garantia é real, mas delimitada ao fluxo interno do Kafka via transações — não a efeitos colaterais externos, que são o caso mais comum em sistemas reais.
Pode vir a seguir
Prováveis follow-ups: "o que é Idempotência?" e "como evitar processamento duplicado numa integração com banco de dados externo?".
Capítulos relacionados