Kafka vs RocketMQ ——消息及時性對比(轉)
原文:https://developer.aliyun.com/article/62836?utm_source=chatgpt.com
作者:依稀以西
來源:阿里云開發者技術社區
引言
在前幾期的消息中間件對比中,我們為Kafka和RocketMQ設定了幾個性能場景(單機系統可靠性、多Topic對性能穩定性的影響以及Topic數量對單機性能的影響),這些場景大都是以服務端的吞吐能力為對比焦點。這一期,我們將從客戶端的角度出發,為大家帶來Kafka和RocketMQ消息及時性的對比。
何謂消息及時性?
消息及時性是指對于一條消息來說,從消息發送到消息中間件這一時刻起,到最終到達消費端所消耗的總時間。
是不是有點抽象?我們來看個物流公司配送的例子,便于理解:
賣家把貨物投遞給物流公司就不再關心這筆交易了,但買家此時卻更希望早點收到貨品,這時就到了物流公司之間比拼運送能力的時候了,如果用飛機,買家就幸福了,而輪船呢,就只能默默等待了。這個過程里買家所等待的時間,就是一次物流的整體耗時,因此我說:整體耗時越短,及時性就越好,反之,及時性就是越差

通過上面的解釋明白此次試驗的目的了吧,就是對于同樣數量的消息,Kafka和RocketMQ哪一個會用更短的時間處理完,以減少業務等待的時間
測試目的
在消息同步收發的情況下,Kafka和RocketMQ各自發送并處理200萬條128字節大小的消息,測算消息中間件從消息生產者發送第一條消息到消費者處理完最后一條消息所消耗的時間,對不同并發數下的Kafka和RocketMQ的消息及時性進行對比。
測試場景
場景描述
測試過程中,Kafka和RocketMQ均使用相同的測試環境和客戶端邏輯,接收端每接收2條消息,產生1ms的時間延遲來模擬消費端的處理耗時,消息隊列數均設置為8,分別記錄Kafka和RocketMQ在不同的發端并發數下,從生產者發送第一條消息到消費者接收到第200W條消息的耗時.
- 測試數據如下:

我們可以看到,當發送端的并發數小的時候,Kafka和RocketMQ的接收端速度都能與之持平,Kafka表現稍好,隨著發送端并發數的增加,消息處理量增大,Kafka對于發送端消息的存儲能力強于RocketMQ,但是把消息投遞給消費端的能力非常弱,導致消息處理的時間幾乎是RocketMQ的兩倍,此時RocketMQ的消息及時性遠勝Kafka。
測試結論
在測試過程中,Kafka就好像是一個倉庫無窮大的物流公司,貨物入倉庫很快,但是配送多用輪船和汽車,送貨速度很慢,比如(某達速運,某通速運)。RocketMQ則像是一個倉庫容量有界限的物流公司,貨物入庫的速度是一定的,但是配送多用飛機和汽車,送貨很快(比如某豐速運)
如果公司的業務量非常小,一天中幾乎不存在高峰的時段,那么Kafka或RocketMQ都可以。而當消息的處理數量上升后,Kafka累積消息的能力強于RocketMQ,但是把消息投遞給消費的能力大幅下降,導致消耗過多的時間(Kafka要133秒,RocketMQ要65秒)。在消息及時性這個場景,RocketMQ完勝Kafka附錄
測試環境
服務端為單機部署,機器配置如下:

-
應用版本

-
測試腳本
-

未完待續
RocketMQ在這場消息及時性測試中表現優異,原因一點不奇怪,RocketMQ的索引機制起到了關鍵作用。消息類的對比測試也并未結束,我們會陸續加入新的評測場景,敬請期待!

浙公網安備 33010602011771號