Vấn đề: khi một service cần cập nhật DB và publish event lên Kafka trong cùng một operation, nếu không có coordination: DB commit thành công nhưng Kafka publish fail → inconsistency (event mất); hoặc Kafka publish thành công nhưng DB rollback → inconsistency (event giả).
Hai thao tác này không thể wrap trong 2-phase commit thực tế. Outbox pattern giải quyết bằng cách:
- Trong cùng DB transaction, write business data VÀ write event vào bảng
outboxtrong DB; - Một separate process (Outbox Processor/CDC) đọc bảng outbox và publish lên Kafka;
- Sau khi publish thành công, đánh dấu event là processed (hoặc xóa)
Implement bằng Debezium CDC (capture thay đổi outbox table trực tiếp từ DB transaction log) → zero-polling-delay.
Nhược điểm: thêm độ phức tạp, publish có thể bị delay nhỏ.
Đây là pattern bắt buộc trong distributed system production-grade.