MQ選型對比ActiveMQ,RabbitMQ,RocketMQ,Kafka 消息隊列框架選哪個?


最近研究消息隊列,發現好幾個框架,搜羅一下進行對比,說一下選型說明:

1)中小型軟件公司,建議選RabbitMQ。一方面,erlang語言天生具備高並發的特性,而且他的管理界面用起來十分方便。不考慮rocketmq和kafka的原因是,一方面中小型軟件公司不如互聯網公司,數據量沒那么大,選消息中間件,應首選功能比較完備的,所以kafka排除。RocketMQ也很不錯,只是沒有RabbitMQ出來的早,文檔和網上的資料沒有RabbitMQ多,但也是很不錯,RocketMQ是阿里出品,現在阿里已經把RocketMQ捐贈給Apache了,維護和更新不是問題 。

2)大型軟件公司,根據具體使用在rocketMq和kafka之間二選一。一方面,大型軟件公司,具備足夠的資金搭建分布式環境,也具備足夠大的數據量。針對rocketMQ,大型軟件公司也可以抽出人手對rocketMQ進行定制化開發,畢竟國內有能力改JAVA源碼的人,還是相當多的。至於kafka,根據業務場景選擇,如果有日志采集功能,肯定是首選kafka了。具體該選哪個,看使用場景

(上面觀點都是個人意見,僅供參考)

特性

ActiveMQ

RabbitMQ

RocketMQ

kafka

開發語言

java

erlang

java

scala

單機吞吐量

萬級

萬級

10萬級

10萬級

時效性

ms級

us級

ms級

ms級以內

可用性

高(主從架構)

高(主從架構)

非常高(分布式架構)

非常高(分布式架構)

功能特性

成熟的產品,在很多公司得到應用;有較多的文檔;各種協議支持較好

基於erlang開發,所以並發能力很強,性能極其好,延時很低;管理界面較豐富

MQ功能比較完備,擴展性佳

只支持主要的MQ功能,像一些消息查詢,消息回溯等功能沒有提供,畢竟是為大數據准備的,在大數據領域應用廣。

 

ActiveMQ、Kafka、RocketMQ、RabbitMQ比較

 1.ActiveMQ

優點

 單機吞吐量:萬級

 topic數量都吞吐量的影響:

 時效性:ms級

 可用性:高,基於主從架構實現高可用性

 消息可靠性:有較低的概率丟失數據

 功能支持:MQ領域的功能極其完備

缺點:

官方社區現在對ActiveMQ 5.x維護越來越少,較少在大規模吞吐的場景中使用。

 

2.Kafka

號稱大數據的殺手鐧,談到大數據領域內的消息傳輸,則繞不開Kafka,這款為大數據而生的消息中間件,以其百萬級TPS的吞吐量名聲大噪,迅速成為大數據領域的寵兒,在數據采集、傳輸、存儲的過程中發揮着舉足輕重的作用。

Apache Kafka它最初由LinkedIn公司基於獨特的設計實現為一個分布式的提交日志系統( a distributed commit log),之后成為Apache項目的一部分。

目前已經被LinkedIn,Uber, Twitter, Netflix等大公司所采納。

優點

 性能卓越,單機寫入TPS約在百萬條/秒,最大的優點,就是吞吐量高。

 時效性:ms級

 可用性:非常高,kafka是分布式的,一個數據多個副本,少數機器宕機,不會丟失數據,不會導致不可用

 消費者采用Pull方式獲取消息, 消息有序, 通過控制能夠保證所有消息被消費且僅被消費一次;

 有優秀的第三方Kafka Web管理界面Kafka-Manager;

 在日志領域比較成熟,被多家公司和多個開源項目使用;

 功能支持:功能較為簡單,主要支持簡單的MQ功能,在大數據領域的實時計算以及日志采集被大規模使用

缺點:

 Kafka單機超過64個隊列/分區,Load會發生明顯的飆高現象,隊列越多,load越高,發送消息響應時間變長

 使用短輪詢方式,實時性取決於輪詢間隔時間;

 消費失敗不支持重試;

 支持消息順序,但是一台代理宕機后,就會產生消息亂序;

 社區更新較慢;

 

3.RabbitMQ

RabbitMQ 2007年發布,是一個在AMQP(高級消息隊列協議)基礎上完成的,可復用的企業消息系統,是當前最主流的消息中間件之一。

RabbitMQ優點:

 由於erlang語言的特性,mq 性能較好,高並發;

 吞吐量到萬級,MQ功能比較完備  

 健壯、穩定、易用、跨平台、支持多種語言、文檔齊全;

 開源提供的管理界面非常棒,用起來很好用  

 社區活躍度高;

RabbitMQ缺點:

 erlang開發,很難去看懂源碼,基本職能依賴於開源社區的快速維護和修復bug,不利於做二次開發和維護。

 RabbitMQ確實吞吐量會低一些,這是因為他做的實現機制比較重。  

 需要學習比較復雜的接口和協議,學習和維護成本較高。

 

4.RocketMQ

RocketMQ出自 阿里公司的開源產品,用 Java 語言實現,在設計時參考了 Kafka,並做出了自己的一些改進。

RocketMQ在阿里集團被廣泛應用在訂單,交易,充值,流計算,消息推送,日志流式處理,binglog分發等場景。

 

RocketMQ優點:

 單機吞吐量:十萬級

 可用性:非常高,分布式架構

 消息可靠性:經過參數優化配置,消息可以做到0丟失

 功能支持:MQ功能較為完善,還是分布式的,擴展性好

 支持10億級別的消息堆積,不會因為堆積導致性能下降

 源碼是java,我們可以自己閱讀源碼,定制自己公司的MQ,可以掌控 

RocketMQ缺點:

 支持的客戶端語言不多,目前是java及c++,其中c++不成熟;

 社區活躍度一般

 沒有在 mq 核心中去實現JMS等接口,有些系統要遷移需要修改大量代碼 

 


免責聲明!

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



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