Problem
Dual write (DB + Kafka) not transactional. Failures leave inconsistent state. Order placed but no email sent, or vice versa.
Advertisement
Solution
Insert event into outbox table in same TX as business change. Poller reads outbox → publishes → marks processed.
Advertisement
CDC-based
Debezium reads DB replication log. No poller needed. Guaranteed exactly-once from DB perspective. Standard modern approach.