Nâng CaoKafka iconKafka

Transactional Outbox Pattern là gì? Tại sao cần thiết khi dùng Kafka với database?

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:

  1. Trong cùng DB transaction, write business data VÀ write event vào bảng outbox trong DB;
  2. Một separate process (Outbox Processor/CDC) đọc bảng outbox và publish lên Kafka;
  3. 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.

Xem toàn bộ Kafka cùng filter theo level & chủ đề con.

Mở danh sách Kafka