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.