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

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

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

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等接口,有些系統要遷移須要修改大量代碼 

相關文章
相關標籤/搜索