Documentation / Reliability

14

Idempotent Consumer

Engineering evidence from the KafkaPay laboratories.

LAB-VERIFIEDLABKAFKA 4.3.1

Idempotent Consumer

INSERT ... ON CONFLICT DO NOTHING regista um eventId estável antes do efeito de negócio; o commit do offset acontece depois. O laboratório abre uma transação PostgreSQL, tenta inserir em processed_events(event_id, processed_at), executa o pagamento apenas se a inserção for nova, faz commit da transação e só então confirma record.offset()+1 para a partition correspondente.

No crash real, o pagamento e a linha PostgreSQL foram commitados antes de o processo morrer. O restart recebeu a mesma mensagem, imprimiu [duplicate skipped] eventId=... e finalmente commitou o offset. A unicidade está no banco, não num cache local.