Hệ thống hiện tại mình đang dùng để broadcast messages cho các client sử dụng Kafka như sau
Vấn đề hiện tại là khi Request update entities nhận được nhiều thì sẽ dẫn tới messages kafka nhận / truyền cũng nhiều và có thể bị lặp lại (mỗi lần update 1 entity), không tiết kiệm băng thông.
Ý tưởng mình đang đưa ra là hold messages (vd 3s) và group messages lại để
- check record trùng lặp => chỉ lấy entities với được update mới nhất
- Mỗi lần gửi đến Kafka 1 batch các records (gom lại ở 3s đó)
Solutions
- Lưu messages vào redis, dùng interval lấy dữ liệu trong đó gửi đến Kafka rồi clear redis cache.
- Mình check thấy Kafka có Log compacted có thể bỏ đi các records mà có nhiều bản update gần đây với cùng một primary key nhưng mỗi lần mình gửi messages đến thì kafka sẽ gửi đến các consumer luôn nên cách này chưa biết có khả thi không.
Nhờ các cao nhân cho ý kiến / góp ý