最近研究消息隊列,發現好幾個框架,蒐羅一下進行對比,說一下選型說明: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等接口,有些系統要遷移須要修改大量代碼