目前系統間數據交換,普遍采用的是基於消息隊列中間件(MQ)實現。但目前開源的消息中間件琳琅滿目,常見就有RocketMQ、ActiveMQ、RabbitMQ、Kafka、ZeroMQ等等。
下面結合平台建設中比較關心功能點,包括可靠性、可用性、擴展能力、實現語言(便於閱讀)、消費模型、消息類型、消息堆積能力、消息容錯機制、處理性能等方面對市場上主流的RocketMQ、RabbitMQ、Kafka三款產品進行比較,確定誰才更適合我們的業務需要。
功能 |
RocketMQ |
Kafka |
RabbitMQ |
|
可靠性 |
同步刷盤、 異步刷盤 |
異步刷盤,丟數據概率高 |
同步刷盤 |
|
可用性 |
好 |
好 |
好 |
|
橫向擴展能力 |
支持 |
支持 |
集群擴容依賴前端 LVS 負載均衡調度 |
|
實現語言 |
Java |
Scala和Java |
Erlang |
|
消費模型 |
Push / Pull |
Pull |
Push / Pull |
|
定時消息 |
支持(只支持18個固定 Level) |
不支持 |
支持 |
|
順序消息 |
支持 |
支持 |
不支持 |
|
消息堆積能力 |
百億級別(影響性能) |
百億級別(影響性能) |
百億級別(影響性能) |
|
消息堆積查詢 |
支持 |
不支持 |
不支持 |
|
消息回溯 |
支持 |
不支持 |
不支持 |
|
消息重試 |
支持 |
不支持 |
支持 |
|
死信隊列 |
支持 |
不支持 |
支持 |
|
性能(常規) |
非常好(十萬級 QPS) |
非常好(百萬級 QPS) |
一般(萬級 QPS) |
|
性能(萬級 Topic 場景) |
非常好(十萬級 QPS) |
低 |
低 |
|
性能(海量消息堆積場景) |
非常好(十萬級 QPS) |
低 |
低 |
從以上的對比結果來看,Apache RocketMQ對於其他兩個優勢明顯。