一、背景
一般大型企業都有中間件開發團隊,不管是自研還是對開源的消息隊列產品進行二次開發,開源的消息隊列是無法滿足大企業需要。
二、消息平臺核心功能
- 高可用
- 多節點數據一致性(paxos)
- 自適應rebalance
- 高性能事務消息
- 高性能順序消費
- 通用冪等抽象
- 任意時間延遲隊列
- 消息重放
- 死信隊列
- 消息堆積
- 低延遲
三、常見的開源消息中間件
- ActiveMQ
- ZeroMQ
- RabbitMQ
- Kafka
- RocketMQ
- Pulsar
- QMQ
- nsq
以上產品並沒有滿足企業級消息平臺的需求 ActiveMQ
已經淘汰,ZeroMQ
並不是一個消息隊列產品,最多算一個Rpc,RabbitMQ
、Kafka
不支持事務消息、任意延遲隊列、順序消息rehash
、RabbitMQ進行二次開發難度大,沒有集羣分片方案,依賴鏡像保證可靠性。
四、改造思路
- 客戶端改造
- 統一抽象消息隊列的客戶端,提供事務消息、延遲消息、順序消息、單向消息、通用冪等處理器的SDK。
- 在client層代理,提供發送前事件、發送後事件、發送異常事件,給予客戶端一定的擴展性
- 統一抽象過濾器,由客戶端實現對消息的過濾或者增強
- 基於OpenTracing提供TraceContext信息的傳遞和上報
- 替換底層Rpc框架
- 服務端(平臺層)改造
- 統一抽象消息存儲,基於Kafka、TiDB對消息進行持久化
- 元數據管理
- 一致性rebalance
- 基於RocksDB的事務消息、延遲消息、死信消息臨時存儲
- 秒級時間輪定時任務,負責二段事務消息的回調、延遲隊列重新投遞
- 監控控制檯
- 生產消費情況
- 消息堆積
- 接入客戶端
- 硬件信息
- 死信消息重新投遞
- 重置offset消息重放
- 新增節點