1. 程式人生 > >RocketMQ與Kafka對比(18項差異)

RocketMQ與Kafka對比(18項差異)

轉自:https://github.com/alibaba/RocketMQ/wiki/rmq_vs_kafka

淘寶內部的交易系統使用了淘寶自主研發的Notify訊息中介軟體,使用Mysql作為訊息儲存媒介,可完全水平擴容,為了進一步降低成本,我們認為儲存部分可以進一步優化,2011年初,Linkin開源了Kafka這個優秀的訊息中介軟體,淘寶中介軟體團隊在對Kafka做過充分Review之後,Kafka無限訊息堆積,高效的持久化速度吸引了我們,但是同時發現這個訊息系統主要定位於日誌傳輸,對於使用在淘寶交易、訂單、充值等場景下還有諸多特性不滿足,為此我們重新用Java語言編寫了RocketMQ,定位於非日誌的可靠訊息傳輸(日誌場景也OK),目前RocketMQ在阿里集團被廣泛應用在訂單,交易,充值,流計算,訊息推送,日誌流式處理,binglog分發等場景。

為了方便大家選型,整理一份RocketMQ與Kafka的對比文件,文中如有錯誤之處,歡迎來函指正。[email protected]

資料可靠性

  • RocketMQ支援非同步實時刷盤,同步刷盤,同步Replication,非同步Replication
  • Kafka使用非同步刷盤方式,非同步Replication

總結:RocketMQ的同步刷盤在單機可靠性上比Kafka更高,不會因為作業系統Crash,導致資料丟失。 同時同步Replication也比Kafka非同步Replication更可靠,資料完全無單點。另外Kafka的Replication以topic為單位,支援主機宕機,備機自動切換,但是這裡有個問題,由於是非同步Replication,那麼切換後會有資料丟失,同時Leader如果重啟後,會與已經存在的Leader產生資料衝突。開源版本的RocketMQ不支援Master宕機,Slave自動切換為Master,

阿里雲版本的RocketMQ支援自動切換特性。

效能對比

  • RocketMQ單機寫入TPS單例項約7萬條/秒,單機部署3個Broker,可以跑到最高12萬條/秒,訊息大小10個位元組

總結:Kafka的TPS跑到單機百萬,主要是由於Producer端將多個小訊息合併,批量發向Broker。

RocketMQ為什麼沒有這麼做?

  1. Producer通常使用Java語言,快取過多訊息,GC是個很嚴重的問題
  2. Producer呼叫傳送訊息介面,訊息未傳送到Broker,向業務返回成功,此時Producer宕機,會導致訊息丟失,業務出錯
  3. Producer通常為分散式系統,且每臺機器都是多執行緒傳送,我們認為線上的系統單個Producer每秒產生的資料量有限,不可能上萬。
  4. 快取的功能完全可以由上層業務完成。

單機支援的佇列數

  • Kafka單機超過64個佇列/分割槽,Load會發生明顯的飆高現象,佇列越多,load越高,傳送訊息響應時間變長
  • RocketMQ單機支援最高5萬個佇列,Load不會發生明顯變化

佇列多有什麼好處?

  1. 單機可以建立更多Topic,因為每個Topic都是由一批佇列組成
  2. Consumer的叢集規模和佇列數成正比,佇列越多,Consumer叢集可以越大

訊息投遞實時性

  • Kafka使用短輪詢方式,實時性取決於輪詢間隔時間
  • RocketMQ使用長輪詢,同Push方式實時性一致,訊息的投遞延時通常在幾個毫秒。

消費失敗重試

  • Kafka消費失敗不支援重試
  • RocketMQ消費失敗支援定時重試,每次重試間隔時間順延

總結:例如充值類應用,當前時刻呼叫運營商閘道器,充值失敗,可能是對方壓力過多,稍後在呼叫就會成功,如支付寶到銀行扣款也是類似需求。

這裡的重試需要可靠的重試,即失敗重試的訊息不因為Consumer宕機導致丟失。

嚴格的訊息順序

  • Kafka支援訊息順序,但是一臺Broker宕機後,就會產生訊息亂序
  • RocketMQ支援嚴格的訊息順序,在順序訊息場景下,一臺Broker宕機後,傳送訊息會失敗,但是不會亂序

Mysql Binlog分發需要嚴格的訊息順序

定時訊息

  • Kafka不支援定時訊息
  • RocketMQ支援兩類定時訊息
    • 開源版本RocketMQ僅支援定時Level
    • 阿里雲ONS支援定時Level,以及指定的毫秒級別的延時時間

分散式事務訊息

  • Kafka不支援分散式事務訊息
  • 阿里雲ONS支援分散式定時訊息,未來開源版本的RocketMQ也有計劃支援分散式事務訊息

訊息查詢

  • Kafka不支援訊息查詢
  • RocketMQ支援根據Message Id查詢訊息,也支援根據訊息內容查詢訊息(傳送訊息時指定一個Message Key,任意字串,例如指定為訂單Id)

總結:訊息查詢對於定位訊息丟失問題非常有幫助,例如某個訂單處理失敗,是訊息沒收到還是收到處理出錯了。

訊息回溯

  • Kafka理論上可以按照Offset來回溯訊息
  • RocketMQ支援按照時間來回溯訊息,精度毫秒,例如從一天之前的某時某分某秒開始重新消費訊息

總結:典型業務場景如consumer做訂單分析,但是由於程式邏輯或者依賴的系統發生故障等原因,導致今天消費的訊息全部無效,需要重新從昨天零點開始消費,那麼以時間為起點的訊息重放功能對於業務非常有幫助。

消費並行度

  • Kafka的消費並行度依賴Topic配置的分割槽數,如分割槽數為10,那麼最多10臺機器來並行消費(每臺機器只能開啟一個執行緒),或者一臺機器消費(10個執行緒並行消費)。即消費並行度和分割槽數一致。

  • RocketMQ消費並行度分兩種情況

    • 順序消費方式並行度同Kafka完全一致
    • 亂序方式並行度取決於Consumer的執行緒數,如Topic配置10個佇列,10臺機器消費,每臺機器100個執行緒,那麼並行度為1000。

訊息軌跡

  • Kafka不支援訊息軌跡
  • 阿里雲ONS支援訊息軌跡

開發語言友好性

  • Kafka採用Scala編寫
  • RocketMQ採用Java語言編寫

Broker端訊息過濾

  • Kafka不支援Broker端的訊息過濾
  • RocketMQ支援兩種Broker端訊息過濾方式
    • 根據Message Tag來過濾,相當於子topic概念
    • 向伺服器上傳一段Java程式碼,可以對訊息做任意形式的過濾,甚至可以做Message Body的過濾拆分。

訊息堆積能力

理論上Kafka要比RocketMQ的堆積能力更強,不過RocketMQ單機也可以支援億級的訊息堆積能力,我們認為這個堆積能力已經完全可以滿足業務需求。

開源社群活躍度

商業支援

成熟度

  • Kafka在日誌領域比較成熟
  • RocketMQ在阿里集團內部有大量的應用在使用,每天都產生海量的訊息,並且順利支援了多次天貓雙十一海量訊息考驗,是資料削峰填谷的利器。

相關推薦

RocketMQKafka對比18差異評價版

RocketMQ與Kafka對比(18項差異) 2015-02-28 王啟軍 奔跑中的蝸牛 此文是rocketmq作者vintage.wang所寫,對於每項對比,後面都增加了我的觀點,有不對的地方,請各位指出。 淘寶內部的交

RocketMQKafka對比18差異

轉自:https://github.com/alibaba/RocketMQ/wiki/rmq_vs_kafka 淘寶內部的交易系統使用了淘寶自主研發的Notify訊息中介軟體,使用Mysql作為訊息儲存媒介,可完全水平擴容,為了進一步降低成本,我們認為儲存部分可以進一

RocketMQkafka對比

       淘寶內部的交易系統使用了淘寶自主研發的Notify訊息中介軟體,使用Mysql作為訊息儲存媒介,可完全水平擴容,為了進一步降低成本,我們認為儲存部分可以進一步優化,2011年初,Linkin開源了Kafka這個優秀的訊息中介軟體,淘寶中介軟體團隊在對Kafk

RocketMQSpring整合含生產者消費者

RocketMQ與Spring整合,採用push方式接收訊息。後面有生產者與Spring整合,以及使用方法。 maven依賴 <dependency> <groupId>com.alib

分散式訊息佇列RocketMQKafka18差異之“撥亂反正”

我們知道,阿里的RocketMQ其實源自Kafka。同時網路上一直流傳著1篇阿里中介軟體團隊所寫的RocketMQ與Kafka的18項差異的文章,並且被廣泛轉發。比如: http://blog.csdn.net/damacheng/article/detail

物品丟失找回結對

!= equal 必須 miss findview 上下文 find lin intent Lost and Found(失物招領APP) Lost and Found(失物招領APP)是以Bmob為基礎的,參考了網上的案例。主要實現物品的發布、修改、呈現和刪除。使用場

沃趣微講堂 | PXC、MGC&MGR原理實踐對比

本期課程:PXC、MGC&MGR初相識 講師 | 羅小波·沃趣科技高階資料庫技術專家 出品 | 沃趣科技     七月份,波多老師線下作了一場題為“PXC、MGC&MGR原理與實踐對比”的精彩分享,整場下來,乾貨滿滿,現場的童鞋都聽得灰常

《TensorFlow:實戰Google深度學習框架》——6.2 卷積神經網路簡介卷積神經網路的基本網路結構及其全連線神經網路的差異

下圖為全連線神經網路與卷積神經網路的結構對比圖: 由上圖來分析兩者的差異:                  全連線神經網路與卷積網路相同點   &nb

Web開發中PHPJAVA對比轉載

    在市場上的電子商務軟體基本上可歸結為兩大陣營,即PHP陣營和Java陣營。但對接觸電子商務不久的使用者來說,看到的往往只是它們的表相,只是明顯的價格差異,卻很難看出它們之間的實際差異。其實,PHP+ MySQL高效的開發、品質優良的特性,已經讓風靡大學校園的Java變的越來越難堪。而作為PHP+ My

MQTTkafka對比分析

本人的公司內部分享,分享給大家。上面是圖片版,下面是文字表格 1.名稱 MQTT kafka 2.歷史 IBM推出的一種針對移動終端裝置的釋出/預訂協議。 Link

[Linux] Linux 中的基本命令目錄結構待移除

head 命令 存在 壓縮 下載 創建文件 name 批處理 targe 簡化 Linux 中的基本命令與目錄結構 目錄 一、Linux 基本目錄結構 二、基本命令 三、瀏覽目錄 四、中間命令 五、更改密碼 六、環境變量和 shell 變量 七、命令路徑

幾種知名開源富文本編輯器記錄和對比僅供參考

上傳 ueditor 沒有 .net tinymce ots 加載 編輯 ckeditor 1、UEditor 百度的。 優點:插件多,基本滿足各種需求,類似貼吧中的回復界面。 缺點:不再維護,文檔極少,使用並不普遍,圖片只能上傳到本地服務器,如果需要上傳到其他服務器需

c# excel 導入 導出可直接用

enter access arr message owin dateutil win toarray port c#操作excel方式很多 采用OleDB讀取EXCEL文件: 引用的com組件:Microsoft.Office.Interop.Excel.dll 讀

[2017浙工大之江學院決賽 L] qwb整數對離線,篩

online con ons print include main amp i++ max 題目鏈接:http://115.231.222.240:8081/JudgeOnline/problem.php?cid=1005&pid=11 這題不會,看了檸檬巨的題解才

Lost and Found結對目總結

cnblogs 進一步 隊友 自身 ima 解決 總結 聯系 過程 一、確定主題 在進行了大學生生活中最常見的三個痛點調查和分析之後,針對在生活中經常會遇到的飯卡丟失問題,設計了調查問卷。對一些常見問題進行進一步分析,初步確定了結對項目的主題。但在討論和分析之後感覺

Nginx代理反向代理rpm包安裝

服務器 apache nginx 反向代理 註意:情況1:當後端是獨立的php-fpm服務器模塊的話需要fastcgi協議情況2:當後端是LAMP的話,使用的就是Apache協議不需要開啟fastcgi模塊直接寫個location / {proxy_pass http://backserver

數據結構算法刺猬書讀書筆記----目錄

更新 rip javascrip tar 結構 順序 耗時 梳理 讀書筆記 最近在抓底層的語言基礎,以前對數據結構和算法並沒有太大感覺,但越往深處學就越覺得這些基礎真的是要牢牢掌握住。一個簡簡單單的數組,深究起來都有很多學問。所以打算寫個一系列的讀書筆記,好好梳理一下這一塊

數據結構算法刺猬書讀書筆記1----數組

split() ring 此外 結果 shift 即使 cnblogs 操作符 main 在JavaScript中,數組其實是一種特殊的對象,用來表示偏移量的索引是該對象的屬性,所以JavaScript的數組本質上是對象。同時這些數字索引在內部會被轉換成為字符串類型,因為J

代碼綜合後的電路對比不定時更新

output pre n) sed log 會有 blank 不同 blog   這裏來記錄一下相似代碼之間的不同差異,比如同步復位與異步復位觸發器的對比,上升沿復位和下降沿復位的對比等等。這裏主要使用ISE的綜合引擎。直接附上代碼和綜合後電路圖,有些會有部分講解。

VUE註意事項

imp data 完成 啟動 分享 name fault export pla 1》刪除空格影響的:刪除掉框中的代碼 2>不需要新建,直接打開APP.vue,在此文件上進行修改,(註意:index.html最好不要進行修改) 3》修改APP.vue為自己需要的頁面,