là cơ chế của Kafka:
- Offset: Kafka lưu vị trí đọc cuối (offset) của mỗi consumer group
- Persistence: Messages được lưu vào disk theo retention policy
- Consumer Group: Khi service up lại, nó sẽ đọc từ offset cuối đã lưu
=> Nhờ vậy không mất message khi service down, service sẽ đọc tiếp từ điểm dừng khi up lại.

Dữ liệu được lưu trong Zookeeper
/
├── brokers
│ ├── ids # Danh sách các broker đang hoạt động
│ └── topics # Metadata của topics
├── controller # Thông tin về controller hiện tại
├── consumers
│ └── [group_ids] # Consumer group metadata
└── config
└── topics # Cấu hình của topics
Client -> API -> Producer Controller -> Producer Service -> Kafka Broker -> Consumer Service
Giải thích cách hoạt động:
- Khi ứng dụng khởi động:
- NestJS tạo kết nối với Kafka broker
- Microservice được khởi động để lắng nghe các message
- Khi gửi request POST:
- Controller nhận request và gọi ProducerService
- ProducerService emit message đến Kafka topic 'test-topic'
- ConsumerService nhận message từ topic và xử lý (trong demo này chỉ log ra console)
- Cấu trúc message:
- Message được gửi kèm timestamp
- Consumer có thể xử lý message theo nhu cầu
Lưu ý:
- Đảm bảo Kafka và Zookeeper đang chạy trước khi khởi động ứng dụng
- Kiểm tra logs để xem các message được gửi và nhận
- Trong môi trường production, cần cấu hình thêm về bảo mật và các tùy chọn khác của Kafka
Có thể mở rộng demo này bằng cách: