概述
MQ(Message Queue),即消息隊列。早已成為企業(yè)IT系統(tǒng)內部通信的核心手段。它具有低耦合、可靠投遞、廣播、流量控制、最終一致性等一系列功能,成為異步RPC的主要手段之一。當今市面上有很多主流的MQ,如老牌的ActiveMQ、RabbitMQ,炙手可熱的Kafka,阿里巴巴自主開發(fā)RocketMQ等。文章來源:http://www.zghlxwxcb.cn/news/detail-636872.html
幾種MQ的對比
下面我們先看下主流的幾種MQ的對比,如下表格:文章來源地址http://www.zghlxwxcb.cn/news/detail-636872.html
比較項 | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
---|---|---|---|---|
所屬社區(qū)/公司 | Apache | Mozilla Public License | 阿里巴巴 | Apache |
成熟度及授權 | 成熟/開源 | 成熟/開源 | 比較成熟/開源 | 成熟/開源 |
開發(fā)語言 | java | Erlang | java | Scala&java |
客戶端支持語言 | Java、C/C++、Python、PHP、Perl、.net等 | 官方支持Erlang,java,Ruby等,社區(qū)產出多種語言API,幾乎支持所有常用語言 | Java、C++ | 官方支持java,開源社區(qū)有多語言版本,如PHP,Python,Go,C/C++,Ruby等 |
協議支持 | OpenWire、STOMP、REST、XMPP、AMQP | 多協議支持:AMQP,XMPP,SMTP,STOMP | 自己定義的一套(社區(qū)提供JMS–不成熟) | 自有協議,社區(qū)封裝了HTTP協議支持 |
HA | 基于ZooKeeper + LevelDB的Master-Slave實現方式 | master/slave模式,master提供服務,slave僅作備份(冷備) | 支持多Master模式,多Master多Slave模式,異步復制模式、同步雙寫 | 支持replica機制,leader宕掉后,備份自動頂替,并重新選舉leader(基于Zookeeper) |
數據可靠性 | Master/slave,有較低的概率丟失數據 | 可以保證數據不丟,有slave用作備份 | 支持異步實時刷盤,同步刷盤,同步復制,異步復制 | 數據可靠,且有replica機制,有容錯容災能力 |
單機吞吐量 | 萬級 | 萬級 | 十萬級,支撐高吞吐 | 十萬級,高吞吐,一般配合大數據類的系統(tǒng)進行實時數據計算、日志采集等場景 |
消息延遲 | 毫秒級 | 微秒級 | 毫秒級 | 毫秒級以內 |
流量控制 | 基于Credit-Based算法,是內部被動觸發(fā)的保護機制,作用于生產者層面。 | 支持client和user級別,通過主動設置可將流控作用于生產者或消費者。 | ||
持久化能力 | 默認內存,正常關閉時將內存中未處理的消息持久化文件,如果使用JDBC策略,則入數據庫 | 內存、文件,支持數據堆積。但堆積反過來影響吞吐量 | 磁盤文件 | 磁盤文件。只要磁盤容量夠,可以做到無限消息堆積 |
負載均衡 | 支持 | 支持 | 支持 | 支持 |
管理界面 | 一般 | 較好 | 命令行界面 | 官方只提供命令行版,yahoo開源自己的web管理界面 |
部署方式及難易 | 獨立/容易 | 獨立/容易 | 獨立/容易 | 獨立/容易 |
功能支持 | MQ領域的功能較為完備 | 基于Erlang開發(fā),并發(fā)能力很強,性能極好,時延很低 | MQ功能較為完善,還是分布式的,擴展性好 | 功能較為簡單,主要支持簡單的MQ功能,在大數據領域的實時計算以及日志采集方面被大規(guī)模使用 |
綜合以上對比后,有如下建議:
- 通常早期大家都使用ActiveMQ,現在使用的不多,畢竟沒有經歷過大規(guī)模吞吐量場景的驗證,并且目前社區(qū)也不夠活躍,不推薦使用。
- 而RoceketMQ來自阿里出品,目前有越來越多的公司嘗試使用,反映確實不錯。但社區(qū)活躍度不高,那些對自身公司技術實力信心滿滿的可以考慮。
- 而Kafka名聲在外,之前在一家國產數據庫公司時,當時的總架就講解、推薦過。但目前來看,大數據領域的實時計算、日志采集等場景,kafka是業(yè)內標準,社區(qū)活躍度極高。有這方面的需求的,可以優(yōu)先考慮。
- 最后對于RabbitMQ,無論從軟件成熟度,社區(qū)活躍度(最新的release版是2019年12月的),還是基本的吞吐能力,以及低時延,界面管理等方面,對于技術實力一般,技術挑戰(zhàn)不是很高的公司,可以考慮。RabbitMQ是個不錯的選擇。
- 最后,沒有完美的產品,只有合適的軟件。技術選型畢竟還是要滿足業(yè)務需求的,滿足功能即可。
到了這里,關于【技術選型】ActiveMQ、RocketMQ、RabbitMQ、Kafka對比的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!