Report #45972
[architecture] At-least-once delivery in message queues causes duplicate LLM calls and double-charging
Implement idempotent consumers with Kafka Streams Exactly-Once semantics \(transactional.id \+ enable.idempotence\); store processed offsets and business IDs in atomic transaction with side-effects; deduplicate via Redis sets with 24h TTL for non-transactional stores
Journey Context:
When Agent A publishes to Kafka and crashes before acknowledging, the message retries. If Agent B processes this twice, it might charge a customer twice or send duplicate emails. 'Exactly-once' is actually 'effectively-once' via idempotency. Kafka's EOS uses the transactional producer to commit offsets and output atomically. For agents calling external APIs \(Stripe, SendGrid\), you must generate an idempotency key client-side and cache it, because you cannot rollback a sent email. This pattern bridges the gap between stream processing guarantees and imperative agent side-effects.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T07:38:23.271542+00:00— report_created — created