溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行RocketMQ與Kafka對比

發(fā)布時(shí)間:2021-12-01 15:58:15 來源:億速云 閱讀:157 作者:柒染 欄目:云計(jì)算

這篇文章給大家介紹如何進(jìn)行RocketMQ與Kafka對比,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

淘寶內(nèi)部的交易系統(tǒng)使用了淘寶自主研發(fā)的Notify消息中間件,使用Mysql作為消息存儲媒介,可完全水平擴(kuò)容,為了進(jìn)一步降低成本,我們認(rèn)為存儲部分可以進(jìn)一步優(yōu)化,2011年初,Linkin開源了Kafka這個(gè)優(yōu)秀的消息中間件,淘寶中間件團(tuán)隊(duì)在對Kafka做過充分Review之后,Kafka無限消息堆積,高效的持久化速度吸引了我們,但是同時(shí)發(fā)現(xiàn)這個(gè)消息系統(tǒng)主要定位于日志傳輸,對于使用在淘寶交易、訂單、充值等場景下還有諸多特性不滿足,為此我們重新用Java語言編寫了RocketMQ,定位于非日志的可靠消息傳輸(日志場景也OK),目前RocketMQ在阿里集團(tuán)被廣泛應(yīng)用在訂單,交易,充值,流計(jì)算,消息推送,日志流式處理,binglog分發(fā)等場景。

數(shù)據(jù)可靠性

  • RocketMQ支持異步實(shí)時(shí)刷盤,同步刷盤,同步Replication,異步Replication

  • Kafka使用異步刷盤方式,異步Replication

總結(jié):RocketMQ的同步刷盤在單機(jī)可靠性上比Kafka更高,不會(huì)因?yàn)椴僮飨到y(tǒng)Crash,導(dǎo)致數(shù)據(jù)丟失。 同時(shí)同步Replication也比Kafka異步Replication更可靠,數(shù)據(jù)完全無單點(diǎn)。另外Kafka的Replication以topic為單位,支持主機(jī)宕機(jī),備機(jī)自動(dòng)切換,但是這里有個(gè)問題,由于是異步Replication,那么切換后會(huì)有數(shù)據(jù)丟失,同時(shí)Leader如果重啟后,會(huì)與已經(jīng)存在的Leader產(chǎn)生數(shù)據(jù)沖突。開源版本的RocketMQ不支持Master宕機(jī),Slave自動(dòng)切換為Master,阿里云版本的RocketMQ支持自動(dòng)切換特性。

性能對比

  • Kafka單機(jī)寫入TPS約在百萬條/秒,消息大小10個(gè)字節(jié)

  • RocketMQ單機(jī)寫入TPS單實(shí)例約7萬條/秒,單機(jī)部署3個(gè)Broker,可以跑到最高12萬條/秒,消息大小10個(gè)字節(jié)

總結(jié):Kafka的TPS跑到單機(jī)百萬,主要是由于Producer端將多個(gè)小消息合并,批量發(fā)向Broker。

RocketMQ為什么沒有這么做?

  1. Producer通常使用Java語言,緩存過多消息,GC是個(gè)很嚴(yán)重的問題

  2. Producer調(diào)用發(fā)送消息接口,消息未發(fā)送到Broker,向業(yè)務(wù)返回成功,此時(shí)Producer宕機(jī),會(huì)導(dǎo)致消息丟失,業(yè)務(wù)出錯(cuò)

  3. Producer通常為分布式系統(tǒng),且每臺機(jī)器都是多線程發(fā)送,我們認(rèn)為線上的系統(tǒng)單個(gè)Producer每秒產(chǎn)生的數(shù)據(jù)量有限,不可能上萬。

  4. 緩存的功能完全可以由上層業(yè)務(wù)完成。

單機(jī)支持的隊(duì)列數(shù)

  • Kafka單機(jī)超過64個(gè)隊(duì)列/分區(qū),Load會(huì)發(fā)生明顯的飆高現(xiàn)象,隊(duì)列越多,load越高,發(fā)送消息響應(yīng)時(shí)間變長

  • RocketMQ單機(jī)支持最高5萬個(gè)隊(duì)列,Load不會(huì)發(fā)生明顯變化

隊(duì)列多有什么好處?

  1. 單機(jī)可以創(chuàng)建更多Topic,因?yàn)槊總€(gè)Topic都是由一批隊(duì)列組成

  2. Consumer的集群規(guī)模和隊(duì)列數(shù)成正比,隊(duì)列越多,Consumer集群可以越大

消息投遞實(shí)時(shí)性

  • Kafka使用短輪詢方式,實(shí)時(shí)性取決于輪詢間隔時(shí)間

  • RocketMQ使用長輪詢,同Push方式實(shí)時(shí)性一致,消息的投遞延時(shí)通常在幾個(gè)毫秒。

消費(fèi)失敗重試

  • Kafka消費(fèi)失敗不支持重試

  • RocketMQ消費(fèi)失敗支持定時(shí)重試,每次重試間隔時(shí)間順延

總結(jié):例如充值類應(yīng)用,當(dāng)前時(shí)刻調(diào)用運(yùn)營商網(wǎng)關(guān),充值失敗,可能是對方壓力過多,稍后在調(diào)用就會(huì)成功,如支付寶到銀行扣款也是類似需求。

這里的重試需要可靠的重試,即失敗重試的消息不因?yàn)镃onsumer宕機(jī)導(dǎo)致丟失。

嚴(yán)格的消息順序

  • Kafka支持消息順序,但是一臺Broker宕機(jī)后,就會(huì)產(chǎn)生消息亂序

  • RocketMQ支持嚴(yán)格的消息順序,在順序消息場景下,一臺Broker宕機(jī)后,發(fā)送消息會(huì)失敗,但是不會(huì)亂序

Mysql Binlog分發(fā)需要嚴(yán)格的消息順序

定時(shí)消息

  • Kafka不支持定時(shí)消息

  • RocketMQ支持兩類定時(shí)消息

    • 開源版本RocketMQ僅支持定時(shí)Level

    • 阿里云ONS支持定時(shí)Level,以及指定的毫秒級別的延時(shí)時(shí)間

分布式事務(wù)消息

  • Kafka不支持分布式事務(wù)消息

  • 阿里云ONS支持分布式定時(shí)消息,未來開源版本的RocketMQ也有計(jì)劃支持分布式事務(wù)消息

消息查詢

  • Kafka不支持消息查詢

  • RocketMQ支持根據(jù)Message Id查詢消息,也支持根據(jù)消息內(nèi)容查詢消息(發(fā)送消息時(shí)指定一個(gè)Message Key,任意字符串,例如指定為訂單Id)

總結(jié):消息查詢對于定位消息丟失問題非常有幫助,例如某個(gè)訂單處理失敗,是消息沒收到還是收到處理出錯(cuò)了。

消息回溯

  • Kafka理論上可以按照Offset來回溯消息

  • RocketMQ支持按照時(shí)間來回溯消息,精度毫秒,例如從一天之前的某時(shí)某分某秒開始重新消費(fèi)消息

總結(jié):典型業(yè)務(wù)場景如consumer做訂單分析,但是由于程序邏輯或者依賴的系統(tǒng)發(fā)生故障等原因,導(dǎo)致今天消費(fèi)的消息全部無效,需要重新從昨天零點(diǎn)開始消費(fèi),那么以時(shí)間為起點(diǎn)的消息重放功能對于業(yè)務(wù)非常有幫助。

消費(fèi)并行度

  • Kafka的消費(fèi)并行度依賴Topic配置的分區(qū)數(shù),如分區(qū)數(shù)為10,那么最多10臺機(jī)器來并行消費(fèi)(每臺機(jī)器只能開啟一個(gè)線程),或者一臺機(jī)器消費(fèi)(10個(gè)線程并行消費(fèi))。即消費(fèi)并行度和分區(qū)數(shù)一致。

  • RocketMQ消費(fèi)并行度分兩種情況

    • 順序消費(fèi)方式并行度同Kafka完全一致

    • 亂序方式并行度取決于Consumer的線程數(shù),如Topic配置10個(gè)隊(duì)列,10臺機(jī)器消費(fèi),每臺機(jī)器100個(gè)線程,那么并行度為1000。

消息軌跡

  • Kafka不支持消息軌跡

  • 阿里云ONS支持消息軌跡

開發(fā)語言友好性

  • Kafka采用Scala編寫

  • RocketMQ采用Java語言編寫

Broker端消息過濾

  • Kafka不支持Broker端的消息過濾

  • RocketMQ支持兩種Broker端消息過濾方式

    • 根據(jù)Message Tag來過濾,相當(dāng)于子topic概念

    • 服務(wù)器上傳一段Java代碼,可以對消息做任意形式的過濾,甚至可以做Message Body的過濾拆分。

消息堆積能力

理論上Kafka要比RocketMQ的堆積能力更強(qiáng),不過RocketMQ單機(jī)也可以支持億級的消息堆積能力,我們認(rèn)為這個(gè)堆積能力已經(jīng)完全可以滿足業(yè)務(wù)需求。

開源社區(qū)活躍度

  • Kafka社區(qū)更新較慢

  • RocketMQ的github社區(qū)有250個(gè)個(gè)人、公司用戶登記了聯(lián)系方式,QQ群超過1000人。

商業(yè)支持

  • Kafka原開發(fā)團(tuán)隊(duì)成立新公司,目前暫沒有相關(guān)產(chǎn)品看到

  • RocketMQ在阿里云上已經(jīng)開放公測近半年,目前以云服務(wù)形式免費(fèi)供大家商用,并向用戶承諾99.99%的可靠性,同時(shí)徹底解決了用戶自己搭建MQ產(chǎn)品的運(yùn)維復(fù)雜性問題

成熟度

  • Kafka在日志領(lǐng)域比較成熟

  • RocketMQ在阿里集團(tuán)內(nèi)部有大量的應(yīng)用在使用,每天都產(chǎn)生海量的消息,并且順利支持了多次天貓雙十一海量消息考驗(yàn),是數(shù)據(jù)削峰填谷的利器。

關(guān)于如何進(jìn)行RocketMQ與Kafka對比就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI