天天看點

Kafka、RabbitMQ、RocketMQ消息中間件的對比 —— 消息發送性能

分布式系統中,我們廣泛運用消息中間件進行系統間的資料交換,便于異步解耦。現在開源的消息中間件有很多,前段時間我們自家的産品 rocketmq (metaq的核心) 也順利開源,得到大家的關注。

那麼,消息中間件性能究竟哪家強?

帶着這個疑問,我們中間件測試組對常見的三類消息産品(kafka、rabbitmq、rocketmq)做了性能比較。

kafka是linkedin開源的分布式釋出-訂閱消息系統,目前歸屬于apache定級項目。kafka主要特點是基于pull的模式來處理消息消費,追求高吞吐量,一開始的目的就是用于日志收集和傳輸。0.8版本開始支援複制,不支援事務,對消息的重複、丢失、錯誤沒有嚴格要求,适合産生大量資料的網際網路服務的資料收集業務。

rabbitmq是使用erlang語言開發的開源消息隊列系統,基于amqp協定來實作。amqp的主要特征是面向消息、隊列、路由(包括點對點和釋出/訂閱)、可靠性、安全。amqp協定更多用在企業系統内,對資料一緻性、穩定性和可靠性要求很高的場景,對性能和吞吐量的要求還在其次。

rocketmq是阿裡開源的消息中間件,它是純java開發,具有高吞吐量、高可用性、适合大規模分布式系統應用的特點。rocketmq思路起源于kafka,但并不是kafka的一個copy,它對消息的可靠傳輸及事務性做了優化,目前在阿裡集團被廣泛應用于交易、充值、流計算、消息推送、日志流式處理、binglog分發等場景。

<a></a>

對比kafka、rabbitmq、rocketmq發送小消息(124位元組)的性能。這次壓測我們隻關注服務端的性能名額,是以壓測的标準是:

不斷增加發送端的壓力,直到系統吞吐量不再上升,而響應時間拉長。這時服務端已出現性能瓶頸,可以獲得相應的系統最佳吞吐量。

Kafka、RabbitMQ、RocketMQ消息中間件的對比 —— 消息發送性能

在同步發送場景中,三個消息中間件的表現區分明顯:

kafka的吞吐量高達17.3w/s,不愧是高吞吐量消息中間件的行業老大。這主要取決于它的隊列模式保證了寫磁盤的過程是線性io。此時broker磁盤io已達瓶頸。

rocketmq也表現不俗,吞吐量在11.6w/s,磁盤io %util已接近100%。rocketmq的消息寫入記憶體後即傳回ack,由單獨的線程專門做刷盤的操作,所有的消息均是順序寫檔案。

rabbitmq的吞吐量5.95w/s,cpu資源消耗較高。它支援amqp協定,實作非常重量級,為了保證消息的可靠性在吞吐量上做了取舍。我們還做了rabbitmq在消息持久化場景下的性能測試,吞吐量在2.6w/s左右。

在服務端處理同步發送的性能上,kafka&gt;rocketmq&gt;rabbitmq。

服務端為單機部署,機器配置如下:

Kafka、RabbitMQ、RocketMQ消息中間件的對比 —— 消息發送性能

應用版本:

Kafka、RabbitMQ、RocketMQ消息中間件的對比 —— 消息發送性能
Kafka、RabbitMQ、RocketMQ消息中間件的對比 —— 消息發送性能

前面我們對比了最簡單的小消息發送場景,kafka暫時勝出。但是,作為經受過曆次雙十一洗禮的rocketmq,在網際網路應用場景中更有它優越的一面。

接下來我們會圍繞分區數量、消息大小、消費形式等不同的影響因子,對三類消息中間件做對比。敬請期待後續報告!