Pular para o conteúdo principal

Pergunta 41 de 50

O que é Idempotência?

PlenoSênior

Pergunta

"O que é Idempotência, no contexto de um consumer Kafka?"

O que o entrevistador quer avaliar

Se você entende idempotência como requisito estrutural (não um "extra de qualidade") sempre que a garantia de entrega é At Least Once — a mais usada na prática.

Resposta rápida

Idempotência é a capacidade de processar o mesmo evento múltiplas vezes sem gerar efeitos colaterais duplicados — o saldo é creditado uma vez, o e-mail é enviado uma vez, mesmo que a mensagem seja entregue duas ou mais vezes.

Resposta nível Sênior

At Least Once (Capítulo 10) garante que nenhuma mensagem é perdida, aceitando como preço que ela pode ser entregue mais de uma vez — depois de um rebalance, de um retry de commit, ou de uma falha entre o fim do processamento e o commit do offset. Um consumer que não trata isso duplica efeitos em produção. A implementação mais robusta usa um identificador único do evento (eventId) e uma constraint de unicidade em banco, verificada e aplicada na mesma transação que executa o efeito de negócio — não em uma checagem prévia separada, que introduziria condição de corrida sob concorrência.

Explicação aprofundada

Veja o capítulo completo — Idempotência.

Exemplo financeiro

O saldo-service mantém uma tabela eventos_processados com constraint de unicidade em eventId. Antes de creditar um PIX, ele tenta inserir o eventId; se falhar por violação de unicidade, o evento já foi processado e a operação é ignorada com segurança — tudo na mesma transação de banco.

"Eu checo se o eventId já existe antes de processar"

Checar e processar em passos separados introduz condição de corrida sob concorrência. A checagem e a aplicação do efeito precisam estar na mesma transação, com a constraint de unicidade como garantia real.

Pode vir a seguir

Prováveis follow-ups: "como evitar processamento duplicado?" e "o que é Replication Factor?".

Capítulos relacionados