rabbitMq、rocketmq、kafaka對比


rabbitMq、rocketMq、kafaka適用場景對比
架構方面:

可靠性:
Kafaka是正常的mq架構,包括provider broker consumer。kafaka有消息確認機制ack
rabbitMq 中的broker由exchange、binder queue三部分組成,其中exchange和binding組成了消息的路由鍵;客戶端Producer通過連接channel和server進行通信,Consumer從queue獲取消息進行消費,rabbit有消息確認機制

RocketMQ支持異步/同步刷盤;異步/同步Replication;

Kafka使用異步刷盤方式,異步Replication。

結論:RocketMQ所支持的同步方式提升了數據的可靠性。

吞吐量方面:
Kafaka采用zero-copy方式,即數據存儲和獲取是本地磁盤順序批量操作,具有O(1)復雜度,數據處理效率很高
RabbitMq在吞吐量方面不如kafaka,RabbitMq支持對消息可靠的傳遞,支持事務,不支持批量的操作。

Kafka單機寫入 TPS 號稱在百萬條/秒;

RocketMQ 大約在10萬條/秒。

結論:追求性能的話,Kafka單機性能更高。

可用性方面
Kafaka的broker采用主備模式,所以可用性很高
RabbitMq支持miror queue,主queue失效,minor queue生效

集群負載方面
Kafaka使用zookeeper實現負載均衡,zookeeper管理集群中的broker sonsumer,通過zookeeper的協調機制,producer會記錄topic對應的broker,對broker進行輪詢或者隨機訪問broker,實現負載均衡
RabbitMq需要單獨自定義負載均衡

消息准確性方面
kafaka支持事務,對消息的重復、丟失、錯誤沒有嚴格要求,可以通過配置參數實現;

rabbitMq采用AMQP協議,AMQP協議更多用在企業系統內,對數據一致性、穩定性和可靠性要求很高的場景


rabbitMq,rocketMq對比
rabbitmq整體更穩定,延遲更小
rabbitMq社區更活躍
rabbitmq管理界面更好
rabbitmq吞吐量為萬級別,少一個量級

Rocketmq和Kafka區別

(1) 適用場景

Kafka適合日志處理;

RocketMQ適合業務處理。

結論:平手,根據具體業務定奪。

 

(2) 性能

Kafka單機寫入 TPS 號稱在百萬條/秒;

RocketMQ 大約在10萬條/秒。

結論:追求性能的話,Kafka單機性能更高。

 

(3) 可靠性

RocketMQ支持異步/同步刷盤;異步/同步Replication;

Kafka使用異步刷盤方式,異步Replication。

結論:RocketMQ所支持的同步方式提升了數據的可靠性。

 

(4) 實時性

均支持pull長輪詢,RocketMQ消息實時性更好

結論:RocketMQ 勝出。

 

(5) 支持的隊列數

Kafka單機超過64個隊列/分區,消息發送性能降低嚴重;

RocketMQ 單機支持最高5萬個隊列,性能穩定

結論:長遠來看,RocketMQ 勝出,這也是適合業務處理的原因之一

 

(6) 消息順序性

Kafka 某些配置下,支持消息順序,但是一台Broker宕機后,就會產生消息亂序

RocketMQ支持嚴格的消息順序,在順序消息場景下,一台Broker宕機后,

發送消息會失敗,但是不會亂序;

結論:RocketMQ 勝出

 

(7)消費失敗重試機制

Kafka消費失敗支持重試,KafkaProducer通過設定參數retries

RocketMQ消費失敗支持定時重試,每次重試間隔時間順延。

 

(8)定時/延時消息

Kafka不支持定時消息;可以使用DelayQueue實現。

RocketMQ支持定時消息

 

(9)分布式事務消息

Kafka不支持分布式事務消息;

阿里雲ONS支持分布式定時消息,未來開源版本的RocketMQ也有計划支持分布式事務消息

 

(10)消息查詢機制

Kafka不支持消息查詢

RocketMQ支持根據Message Id查詢消息,也支持根據消息內容查詢消息

 

(11)消息回溯

Kafka理論上可以按照Offset來回溯消息

RocketMQ支持按照時間來回溯消息,精度毫秒,例如從一天之前的某時某分某秒開始重新消費消息

 

3. 為什么阿里會自研RocketMQ?

 

(1)Kafka的業務應用場景主要定位於日志傳輸;對於復雜業務支持不夠

 

(2)阿里很多業務場景對數據可靠性、數據實時性、消息隊列的個數等方面的要求很高。

 

kafka針對海量數據,但是對數據的正確度要求不是十分嚴格。而阿里巴巴中用於交易相關的事情較多,對數據的正確性要求極高,Kafka不合適

 

(3)當業務成長到一定規模,采用開源方案的技術成本會變高.

 

開源方案無法滿足業務的需要;舊版本、自開發代碼與新版本的兼容都可能是問題;運維角度,Kafka使用 scala 編寫,而阿里是java系。Kafka 的后續維護是個問題。

 

(4)阿里在團隊、成本、資源投入等方面約束性條件幾乎沒有.

 

綜上,阿里選擇自己開發RocketMQ更多是業務的驅動,當業務更多的需要以下功能的支持時,kafka 不能滿足或者 ActiveMQ 等其他消息中間件不能滿足,財大氣粗能力又強業務還復雜,所以就自己開發了。

 

4. 其他

 

另外認為kafka是用於日志傳輸,所以不適合系統的業務事件是個更大的誤區,Kafka本身在最早實現時的確是為了傳輸日志,但后來經過多年發展,其適用范圍早不限於日志,並且很多采取Kafka的公司並非用它來處理日志,kafka背后的 Confluence公司提供了很多基於kafka來簡化系統實現的例子。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM