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.