ActiveMQ、RabbitMQ、RocketMQ、Kafka的介绍及优缺点说明
ActiveMQ
單機吞吐量:萬級
topic數(shù)量都吞吐量的影響:
時效性:ms級
可用性:高,基于主從架構(gòu)實現(xiàn)高可用性
消息可靠性:有較低的概率丟失數(shù)據(jù)
功能支持:MQ領域的功能極其完備
總結(jié):
非常成熟,功能強大,在早些年業(yè)內(nèi)大量的公司以及項目中都有應用 ?
偶爾會有較低概率丟失消息 ?
現(xiàn)在社區(qū)以及國內(nèi)應用都越來越少,官方社區(qū)現(xiàn)在對ActiveMQ 5.x維護越來越少,幾個月才發(fā)布一個版本? ?
主要是基于解耦和異步來用的,較少在大規(guī)模吞吐的場景中使用
?
RabbitMQ
單機吞吐量:萬級
topic數(shù)量都吞吐量的影響:
時效性:微秒級,延時低是一大特點。
可用性:高,基于主從架構(gòu)實現(xiàn)高可用性
消息可靠性:
功能支持:基于erlang開發(fā),所以并發(fā)能力很強,性能極其好,延時很低
總結(jié):
erlang語言開發(fā),性能極其好,延時很低; ?
吞吐量到萬級,MQ功能比較完備 ?
開源提供的管理界面非常棒,用起來很好用 ?
社區(qū)相對比較活躍,幾乎每個月都發(fā)布幾個版本分 ?
在國內(nèi)一些互聯(lián)網(wǎng)公司近幾年用rabbitmq也比較多一些 ? 但是問題也是顯而易見的,RabbitMQ確實吞吐量會低一些,這是因為他做的實現(xiàn)機制比較重。 ?
erlang開發(fā),很難去看懂源碼,基本職能依賴于開源社區(qū)的快速維護和修復bug。 ?
rabbitmq集群動態(tài)擴展會很麻煩,不過這個我覺得還好。其實主要是erlang語言本身帶來的問題。很難讀源碼,很難定制和掌控。
?
RocketMQ
單機吞吐量:十萬級
topic數(shù)量都吞吐量的影響:topic可以達到幾百,幾千個的級別,吞吐量會有較小幅度的下降。可支持大量topic是一大優(yōu)勢。
時效性:ms級
可用性:非常高,分布式架構(gòu)
消息可靠性:經(jīng)過參數(shù)優(yōu)化配置,消息可以做到0丟失
功能支持:MQ功能較為完善,還是分布式的,擴展性好
總結(jié):
接口簡單易用,可以做到大規(guī)模吞吐,性能也非常好,分布式擴展也很方便,社區(qū)維護還可以,可靠性和可用性都是ok的,還可以支撐大規(guī)模的topic數(shù)量,支持復雜MQ業(yè)務場景 ?
而且一個很大的優(yōu)勢在于,源碼是java,我們可以自己閱讀源碼,定制自己公司的MQ,可以掌控 ?
社區(qū)活躍度相對較為一般,不過也還可以,文檔相對來說簡單一些,然后接口這塊不是按照標準JMS規(guī)范走的有些系統(tǒng)要遷移需要修改大量代碼 ?
?
Kafka
單機吞吐量:十萬級,最大的優(yōu)點,就是吞吐量高。
topic數(shù)量都吞吐量的影響:topic從幾十個到幾百個的時候,吞吐量會大幅度下降。所以在同等機器下,kafka盡量保證topic數(shù)量不要過多。如果要支撐大規(guī)模topic,需要增加更多的機器資源
時效性:ms級
可用性:非常高,kafka是分布式的,一個數(shù)據(jù)多個副本,少數(shù)機器宕機,不會丟失數(shù)據(jù),不會導致不可用
消息可靠性:經(jīng)過參數(shù)優(yōu)化配置,消息可以做到0丟失
功能支持:功能較為簡單,主要支持簡單的MQ功能,在大數(shù)據(jù)領域的實時計算以及日志采集被大規(guī)模使用
總結(jié):
kafka的特點其實很明顯,就是僅僅提供較少的核心功能,但是提供超高的吞吐量,ms級的延遲,極高的可用性以及可靠性,而且分布式可以任意擴展 ?
同時kafka最好是支撐較少的topic數(shù)量即可,保證其超高吞吐量 ?
kafka唯一的一點劣勢是有可能消息重復消費,那么對數(shù)據(jù)準確性會造成極其輕微的影響,在大數(shù)據(jù)領域中以及日志采集中,這點輕微影響可以忽略
?
最后
一般的業(yè)務系統(tǒng)要引入MQ,最早大家都用ActiveMQ,但是現(xiàn)在確實大家用的不多了,沒經(jīng)過大規(guī)模吞吐量場景的驗證,社區(qū)也不是很活躍
?
后來大家開始用RabbitMQ,但是確實erlang語言阻止了大量的java工程師去深入研究和掌控他,對公司而言,幾乎處于不可控的狀態(tài),但是確實人家是開源的,比較穩(wěn)定的支持,活躍度也高;
?
不過現(xiàn)在確實越來越多的公司,會去用RocketMQ,確實很不錯,但是要想好社區(qū)萬一突然黃掉的風險
?
所以中小型公司,技術實力較為一般,技術挑戰(zhàn)不是特別高,用RabbitMQ是不錯的選擇;大型公司,基礎架構(gòu)研發(fā)實力較強,用RocketMQ是很好的選擇
?
如果是大數(shù)據(jù)領域的實時計算、日志采集等場景,用Kafka是業(yè)內(nèi)標準的,絕對沒問題,社區(qū)活躍度很高,絕對不會黃,何況幾乎是全世界這個領域的事實性規(guī)范
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的ActiveMQ、RabbitMQ、RocketMQ、Kafka的介绍及优缺点说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查找算法:插值查找算法实现及分析
- 下一篇: 浅谈ORB-SLAM3