分布式系統(tǒng)中,我們廣泛運(yùn)用消息中間件進(jìn)行系統(tǒng)間的數(shù)據(jù)交換,便于異步解耦。現(xiàn)在開(kāi)源的消息中間件有很多,前段時(shí)間我們自家的產(chǎn)品 RocketMQ (阿里云消息隊(duì)列(MQ)的內(nèi)核) 也順利開(kāi)源,得到大家的關(guān)注。
那么,消息中間件性能究竟哪家強(qiáng)?
帶著這個(gè)疑問(wèn),我們消息隊(duì)列測(cè)試小組對(duì)常見(jiàn)的三類消息產(chǎn)品(Kafka、RabbitMQ、RocketMQ)做了性能比較。
Kafka是LinkedIn開(kāi)源的分布式發(fā)布-訂閱消息系統(tǒng),目前歸屬于Apache定級(jí)項(xiàng)目。Kafka主要特點(diǎn)是基于Pull的模式來(lái)處理消息消費(fèi),追求高吞吐量,一開(kāi)始的目的就是用于日志收集和傳輸。0.8版本開(kāi)始支持復(fù)制,不支持事務(wù),對(duì)消息的重復(fù)、丟失、錯(cuò)誤沒(méi)有嚴(yán)格要求,適合產(chǎn)生大量數(shù)據(jù)的互聯(lián)網(wǎng)服務(wù)的數(shù)據(jù)收集業(yè)務(wù)。
RabbitMQ是使用Erlang語(yǔ)言開(kāi)發(fā)的開(kāi)源消息隊(duì)列系統(tǒng),基于AMQP協(xié)議來(lái)實(shí)現(xiàn)。AMQP的主要特征是面向消息、隊(duì)列、路由(包括點(diǎn)對(duì)點(diǎn)和發(fā)布/訂閱)、可靠性、安全。AMQP協(xié)議更多用在企業(yè)系統(tǒng)內(nèi),對(duì)數(shù)據(jù)一致性、穩(wěn)定性和可靠性要求很高的場(chǎng)景,對(duì)性能和吞吐量的要求還在其次。
RocketMQ是阿里開(kāi)源的消息中間件,它是純Java開(kāi)發(fā),具有高吞吐量、高可用性、適合大規(guī)模分布式系統(tǒng)應(yīng)用的特點(diǎn)。RocketMQ思路起源于Kafka,但并不是Kafka的一個(gè)Copy,它對(duì)消息的可靠傳輸及事務(wù)性做了優(yōu)化,目前在阿里集團(tuán)被廣泛應(yīng)用于交易、充值、流計(jì)算、消息推送、日志流式處理、binglog分發(fā)等場(chǎng)景。
測(cè)試目的
對(duì)比Kafka、RabbitMQ、RocketMQ發(fā)送小消息(124字節(jié))的性能。這次壓測(cè)我們只關(guān)注服務(wù)端的性能指標(biāo),所以壓測(cè)的標(biāo)準(zhǔn)是:
不斷增加發(fā)送端的壓力,直到系統(tǒng)吞吐量不再上升,而響應(yīng)時(shí)間拉長(zhǎng)。這時(shí)服務(wù)端已出現(xiàn)性能瓶頸,可以獲得相應(yīng)的系統(tǒng)最佳吞吐量。
測(cè)試場(chǎng)景
在同步發(fā)送場(chǎng)景中,三個(gè)消息中間件的表現(xiàn)區(qū)分明顯:
Kafka的吞吐量高達(dá)17.3w/s,不愧是高吞吐量消息中間件的行業(yè)老大。這主要取決于它的隊(duì)列模式保證了寫(xiě)磁盤(pán)的過(guò)程是線性IO。此時(shí)broker磁盤(pán)IO已達(dá)瓶頸。
RocketMQ也表現(xiàn)不俗,吞吐量在11.6w/s,磁盤(pán)IO %util已接近100%。RocketMQ的消息寫(xiě)入內(nèi)存后即返回ack,由單獨(dú)的線程專門(mén)做刷盤(pán)的操作,所有的消息均是順序?qū)懳募?/p>
RabbitMQ的吞吐量5.95w/s,CPU資源消耗較高。它支持AMQP協(xié)議,實(shí)現(xiàn)非常重量級(jí),為了保證消息的可靠性在吞吐量上做了取舍。我們還做了RabbitMQ在消息持久化場(chǎng)景下的性能測(cè)試,吞吐量在2.6w/s左右。
測(cè)試結(jié)論
在服務(wù)端處理同步發(fā)送的性能上,Kafka>RocketMQ>RabbitMQ。
作為專業(yè)的阿里云消息隊(duì)列測(cè)試小組,不禁想問(wèn),阿里云的MQ和Kafka相比,哪家強(qiáng)?
阿里云消息隊(duì)列 Kafka VS Apache Kafka
阿里云消息隊(duì)列 MQ 推出 Kafka 企業(yè)級(jí)消息服務(wù)(MQ-Kafka),全面融合 Kafka 開(kāi)源生態(tài),兼容 Kafka API,做到無(wú)縫遷移,打造更安全、更可靠、更易運(yùn)維的 Kafka 企業(yè)級(jí)消息服務(wù)。
測(cè)試小組此次也對(duì)Apache Kafka和消息隊(duì)列 Kafka 企業(yè)級(jí)消息服務(wù)在性能、可用性、可靠性等方面做了如下對(duì)比:
對(duì)比項(xiàng)
Apache Kafka(開(kāi)源)
阿里云 MQ-Kafka