RocketMQ與kafka對比
淘寶內部的交易系統使用了淘寶自主研發的Notify訊息中介軟體,使用Mysql作為訊息儲存媒介,可完全水平擴容,為了進一步降低成本,我們認為儲存部分可以進一步優化,2011年初,Linkin開源了Kafka這個優秀的訊息中介軟體,淘寶中介軟體團隊在對Kafka做過充分Review之後,Kafka無限訊息堆積,高效的持久化速度吸引了我們,但是同時發現這個訊息系統主要定位於日誌傳輸,對於使用在淘寶交易、訂單、充值等場景下還有諸多特性不滿足,為此我們重新用Java語言編寫了RocketMQ,定位於非日誌的可靠訊息傳輸(日誌場景也OK),目前RocketMQ在阿里集團被廣泛應用在訂單,交易,充值,流計算,訊息推送,日誌流式處理,binglog分發等場景。
資料可靠性
- RocketMQ支援非同步實時刷盤,同步刷盤,同步複製,非同步複製
- 卡夫卡使用非同步刷盤方式,非同步複製/同步複製
總結:RocketMQ的同步刷盤在單機可靠性上比Kafka更高,不會因為作業系統Crash,導致資料丟失。Kafka同步Replication理論上效能低於RocketMQ的同步Replication,原因是Kafka的資料以分割槽為單位組織,意味著一個Kafka例項上會有幾百個資料分割槽,RocketMQ一個例項上只有一個數據分割槽,RocketMQ可以充分利用IO組Commit機制,批量傳輸資料,配置同步Replication與非同步Replication相比,效能損耗約20%~30%,Kafka沒有親自測試過,但是個人認為理論上會低於RocketMQ。
效能對比
- RocketMQ單機寫入TPS單例項約7萬條/秒,單機部署3個Broker,可以跑到最高12萬條/秒,訊息大小10個位元組
總結:Kafka的TPS跑到單機百萬,主要是由於Producer端將多個小訊息合併,批量發向Broker。
RocketMQ為什麼沒有這麼做?
- 製片人通常使用的Java語言,快取過多訊息,GC是個很嚴重的問題
- Producer呼叫傳送訊息介面,訊息未傳送到Broker,向業務返回成功,此時Producer宕機,會導致訊息丟失,業務出錯
- Producer通常為分散式系統,且每臺機器都是多執行緒傳送,我們認為線上的系統單個Producer每秒產生的資料量有限,不可能上萬。
- 快取的功能完全可以由上層業務完成。
單機支援的佇列數
- Kafka單機超過64個佇列/分割槽,Load會發生明顯的飆高現象,佇列越多,load越高,傳送訊息響應時間變長。Kafka分割槽數無法過多的問題
- RocketMQ單機支援最高5萬個佇列,負載不會發生明顯變化
佇列多有什麼好處?
- 單機可以建立更多話題,因為每個主題都是由一批佇列組成
- 消費者的叢集規模和佇列數成正比,佇列越多,消費類叢集可以越大
訊息投遞實時性
- Kafka使用短輪詢方式,實時性取決於輪詢間隔時間,0.8以後版本支援長輪詢。
-
RocketMQ使用長輪詢,同Push方式實時性一致,訊息的投遞延時通常在幾個毫秒。
消費失敗重試 -
卡夫卡消費失敗不支援重試。
- RocketMQ消費失敗支援定時重試,每次重試間隔時間順延
總結:例如充值類應用,當前時刻呼叫運營商閘道器,充值失敗,可能是對方壓
力過多,稍後再呼叫就會成功,如支付寶到銀行扣款也是類似需求。
這裡的重試需要可靠的重試,即失敗重試的訊息不因為Consumer宕機導致丟失。
嚴格的訊息順序
- 卡夫卡支援訊息順序,但是一臺代理宕機後,就會產生訊息亂序
- RocketMQ支援嚴格的訊息順序,在順序訊息場景下,一臺Broker宕機後,傳送訊息會失敗,但是不會亂序
MySQL的二進位制日誌分發需要嚴格的訊息順序
定時訊息
- 卡夫卡不支援定時訊息
-
RocketMQ支援兩類定時訊息
- 開源版本RocketMQ僅支援定時級別,定時級使用者可定製
- 阿里雲MQ指定的毫秒級別的延時時間
分散式事務訊息
-
卡夫卡不支援分散式事務訊息
-
阿里雲MQ支援分散式事務訊息,未來開源版本的RocketMQ也有計劃支援分散式事務訊息
訊息查詢 -
卡夫卡不支援訊息查詢
-
RocketMQ支援根據訊息標識查詢訊息,也支援根據訊息內容查詢訊息(傳送訊息時指定一個訊息金鑰,任意字串,例如指定為訂單編號)
總結:訊息查詢對於定位訊息丟失問題非常有幫助,例如某個訂單處理失敗,是訊息沒收到還是收到處理出錯了。
訊息回溯 -
卡夫卡理論上可以按照偏移來回溯訊息
- RocketMQ支援按照時間來回溯訊息,精度毫秒,例如從一天之前的某時某分某秒開始重新消費訊息
總結:典型業務場景如consumer做訂單分析,但是由於程式邏輯或者依賴的系統發生故障等原因,導致今天消費的訊息全部無效,需要重新從昨天零點開始消費,那麼以時間為起點的訊息重放功能對於業務非常有幫助。
消費並行度
- Kafka的消費並行度依賴Topic配置的分割槽數,如分割槽數為10,那麼最多10臺機器來並行消費(每臺機器只能開啟一個執行緒),或者一臺機器消費(10個執行緒並行消費)。即消費並行度和分割槽數一致。
-
RocketMQ消費並行度分兩種情況
- 順序消費方式並行度同卡夫卡完全一致
- 亂序方式並行度取決於Consumer的執行緒數,如Topic配置10個佇列,10臺機器消費,每臺機器100個執行緒,那麼並行度為1000。
訊息軌跡
-
卡夫卡不支援訊息軌跡
-
阿里雲MQ支援訊息軌跡
開發語言友好性 -
卡夫卡採用斯卡拉編寫
-
RocketMQ採用的Java語言編寫
券商端訊息過濾 -
卡夫卡不支援代理端的訊息過濾
-
RocketMQ支援兩種代理端訊息過濾方式
- 根據訊息變數來過濾,相當於子主題概念
- 向伺服器上傳一段Java程式碼,可以對訊息做任意形式的過濾,甚至可以做Message身體的過濾拆分。
訊息堆積能力
理論上Kafka要比RocketMQ的堆積能力更強,不過RocketMQ單機也可以支援億級的訊息堆積能力,我們認為這個堆積能力已經完全可以滿足業務需求。
開源社群活躍度
相關推薦
RocketMQ與Kafka對比(18項差異)評價版
RocketMQ與Kafka對比(18項差異) 2015-02-28 王啟軍 奔跑中的蝸牛 此文是rocketmq作者vintage.wang所寫,對於每項對比,後面都增加了我的觀點,有不對的地方,請各位指出。 淘寶內部的交
RocketMQ與kafka對比
淘寶內部的交易系統使用了淘寶自主研發的Notify訊息中介軟體,使用Mysql作為訊息儲存媒介,可完全水平擴容,為了進一步降低成本,我們認為儲存部分可以進一步優化,2011年初,Linkin開源了Kafka這個優秀的訊息中介軟體,淘寶中介軟體團隊在對Kafk
RocketMQ與Kafka對比(18項差異)
轉自:https://github.com/alibaba/RocketMQ/wiki/rmq_vs_kafka 淘寶內部的交易系統使用了淘寶自主研發的Notify訊息中介軟體,使用Mysql作為訊息儲存媒介,可完全水平擴容,為了進一步降低成本,我們認為儲存部分可以進一
分散式訊息佇列RocketMQ與Kafka的18項差異之“撥亂反正”
我們知道,阿里的RocketMQ其實源自Kafka。同時網路上一直流傳著1篇阿里中介軟體團隊所寫的RocketMQ與Kafka的18項差異的文章,並且被廣泛轉發。比如: http://blog.csdn.net/damacheng/article/detail
MQTT與kafka對比分析
本人的公司內部分享,分享給大家。上面是圖片版,下面是文字表格 1.名稱 MQTT kafka 2.歷史 IBM推出的一種針對移動終端裝置的釋出/預訂協議。 Link
kafka與rocketMq的儲存對比
Mq 結構 儲存
分布式消息服務DMS與開源Kafka對比
中間 .html bubuko 分布 分享圖片 托管 cloud tps 隊列 分布式消息服務(簡稱DMS)是一項基於高可用分布式集群技術的消息中間件服務,提供了可靠且可擴展的托管消息隊列,用於收發消息和存儲消息。那麽,比起自建開源的Kafka,分布式消息服務DMS有哪些好
RabbitMQ與KAFKA還有ActiveMQ的對比
簡單的對比三種生產上常用的MQ,提到這三種肯定很多人都使用過,下面針對他們的使用來做個對比。 ActiveMQ 作為老牌的訊息佇列中介軟體,只要使用在併發場景不是特別大的情況下,效能是非常好的,而且支援JMS規範。 而在叢集方面一般採用的是zookeeper來進行心跳檢查,主從的架構,
MQ與kafka之間的對比
1.是否遵守JMS規範 MQ遵守了jms規範,kafka沒有遵循jms規範。kafka利用檔案系統來管理訊息的生命週期 2. 吞吐量 kafka是順序寫磁碟,因此效率非常高。Kafka基於時間或者partition的大小來刪除訊息,同時broker是無狀態的,consume
Flume概念與原理、與Kafka優勢對比
1 .背景 flume是由cloudera軟體公司產出的可分散式日誌收集系統,後與2009年被捐贈了apache軟體基金會,為hadoop相關元件之一。尤其近幾年隨著flume的不斷被完善以及
RabbitMQ與Kafka選型對比
背景 本公司是.Net專案,在.Net可選的MQ比較少,主要Kafka和RabbitMQ,RabbitMQ我也是使用多年了,最近的Kafka廣告與流行度我也是無法無視,因此也是花了點時間收集了資料做了些對比。 此外有個小插曲,當我形成了文件讓老闆兼CTO對比決策後,他打算上阿里雲買MQ服務。我當時給他
zookeeper與kafka安裝部署及java環境搭建
3.4 項目目錄 tin bytes result zxvf util ise cat 1. ZooKeeper安裝部署 本文在一臺機器上模擬3個zk server的集群安裝。 1.1. 創建目錄、解壓 cd /usr/ #創建項目目錄 mkdir zookeepe
Elasticsearch 與 Kafka 整合剖析
簡單 prepare 3.2 ger 郵件 核心 pri servers 技術 1.概述 目前,隨著大數據的浪潮,Kafka 被越來越多的企業所認可,如今的Kafka已發展到0.10.x,其優秀的特性也帶給我們解決實際業務的方案。對於數據分流來說,既可以分流到離線存儲
Hibernate與Mybatis對比
hibernate mybatis Hibernate與Mybatis對比前言 今天同事跟我說現在的公司很少用hibernate,大部門都用mybatis。平時也經常接觸這兩方面,正好最近不怎麽忙,查看網上其他相關技術文檔 ,梳理下Mybatis和Hibernate對比,加深我們對持久化
【kafka】celery與kafka的聯用問題
log 正常 def producing blog tasks _id info 結果 背景:一個小應用,用celery下發任務,任務內容為kafka生產一些數據。 問題:使用confluent_kafka模塊時,單獨啟用kafka可以正常生產消息,但是套上celery後,
Flask與Django對比
ret 發布 應該 join art 復制 else color bubuko Flask與Django對比 Django vs Flask Flask 框架之間的差別 Django功能大而全,Flask只包含基本的配置 Django的一站式解決的思路,能讓
qt 與 mfc 對比
mfcqt 風格 任何一個控件都是一個類。想在哪個窗口添加控件時聲名一個控件變量就好。簡單。 這裏主要講 mfcmfc 風格 第一步通過編輯器在主窗口中添加控件時沒有用。像你搞個控件上去運行雖然顯示但沒用。沒有綁定第二步要想父窗口操控這個控件。必須把這個控件聲名成他的變量。id 就是你拖上去的控件 id 類
dubbo與springcloud對比與面試
問題 但是 兼容性測試 HA blog 面試總結 可能 dubbo csdn 對比:具體見此博客: http://www.sohu.com/a/108961261_468650 dubbo:組裝機 springcloud:品牌機 打個不恰當的比喻:使用Dubbo構建的微服務
實現動畫之CSS與JavaScript對比
運行時 理解 controls 進行 中間 PE osi 聰明人 為什麽 曾經某個時期,大多數開發者使用 jQuery 給瀏覽器中的元素添加動畫。讓這個淡化,讓那個擴大,很簡單。隨著互動的項目越來越復雜,移動設備的大量增加,表現性能變得越來越重要。Flash 被拋棄,有天賦
mysql的varchar與text對比
mysql varchar textvarchar和text是mysql字符存儲爭議比較多的領域,究竟大字段用那個比較好,我們來對比一下,然後自行選擇.大小對比VARCHAR :varchar在mysql中滿足最大行限制,也就是 65535(16k)字節,在mysql中使用 uft-8(mysql中的 utf