1. 程式人生 > >RocketMQ與kafka對比

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為什麼沒有這麼做?

  1. 製片人通常使用的Java語言,快取過多訊息,GC是個很嚴重的問題
  2. Producer呼叫傳送訊息介面,訊息未傳送到Broker,向業務返回成功,此時Producer宕機,會導致訊息丟失,業務出錯
  3. Producer通常為分散式系統,且每臺機器都是多執行緒傳送,我們認為線上的系統單個Producer每秒產生的資料量有限,不可能上萬。
  4. 快取的功能完全可以由上層業務完成。
    單機支援的佇列數
  • Kafka單機超過64個佇列/分割槽,Load會發生明顯的飆高現象,佇列越多,load越高,傳送訊息響應時間變長。Kafka分割槽數無法過多的問題
  • RocketMQ單機支援最高5萬個佇列,負載不會發生明顯變化
    佇列多有什麼好處?
  1. 單機可以建立更多話題,因為每個主題都是由一批佇列組成
  2. 消費者的叢集規模和佇列數成正比,佇列越多,消費類叢集可以越大

訊息投遞實時性

  • 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單機也可以支援億級的訊息堆積能力,我們認為這個堆積能力已經完全可以滿足業務需求。

開源社群活躍度

相關推薦

RocketMQKafka對比(18項差異)評價版

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

RocketMQkafka對比

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

RocketMQKafka對比(18項差異)

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

分散式訊息佇列RocketMQKafka的18項差異之“撥亂反正”

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

MQTTkafka對比分析

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

kafkarocketMq的儲存對比

Mq     結構 儲存   

分布式消息服務DMS開源Kafka對比

中間 .html bubuko 分布 分享圖片 托管 cloud tps 隊列 分布式消息服務(簡稱DMS)是一項基於高可用分布式集群技術的消息中間件服務,提供了可靠且可擴展的托管消息隊列,用於收發消息和存儲消息。那麽,比起自建開源的Kafka,分布式消息服務DMS有哪些好

RabbitMQKAFKA還有ActiveMQ的對比

簡單的對比三種生產上常用的MQ,提到這三種肯定很多人都使用過,下面針對他們的使用來做個對比。 ActiveMQ 作為老牌的訊息佇列中介軟體,只要使用在併發場景不是特別大的情況下,效能是非常好的,而且支援JMS規範。 而在叢集方面一般採用的是zookeeper來進行心跳檢查,主從的架構,

MQkafka之間的對比

1.是否遵守JMS規範 MQ遵守了jms規範,kafka沒有遵循jms規範。kafka利用檔案系統來管理訊息的生命週期 2. 吞吐量 kafka是順序寫磁碟,因此效率非常高。Kafka基於時間或者partition的大小來刪除訊息,同時broker是無狀態的,consume

Flume概念原理、Kafka優勢對比

1 .背景      flume是由cloudera軟體公司產出的可分散式日誌收集系統,後與2009年被捐贈了apache軟體基金會,為hadoop相關元件之一。尤其近幾年隨著flume的不斷被完善以及

RabbitMQKafka選型對比

背景   本公司是.Net專案,在.Net可選的MQ比較少,主要Kafka和RabbitMQ,RabbitMQ我也是使用多年了,最近的Kafka廣告與流行度我也是無法無視,因此也是花了點時間收集了資料做了些對比。   此外有個小插曲,當我形成了文件讓老闆兼CTO對比決策後,他打算上阿里雲買MQ服務。我當時給他

zookeeperkafka安裝部署及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,其優秀的特性也帶給我們解決實際業務的方案。對於數據分流來說,既可以分流到離線存儲

HibernateMybatis對比

hibernate mybatis Hibernate與Mybatis對比前言 今天同事跟我說現在的公司很少用hibernate,大部門都用mybatis。平時也經常接觸這兩方面,正好最近不怎麽忙,查看網上其他相關技術文檔 ,梳理下Mybatis和Hibernate對比,加深我們對持久化

kafka】celerykafka的聯用問題

log 正常 def producing blog tasks _id info 結果 背景:一個小應用,用celery下發任務,任務內容為kafka生產一些數據。 問題:使用confluent_kafka模塊時,單獨啟用kafka可以正常生產消息,但是套上celery後,

FlaskDjango對比

ret 發布 應該 join art 復制 else color bubuko Flask與Django對比 Django vs Flask Flask 框架之間的差別 Django功能大而全,Flask只包含基本的配置 Django的一站式解決的思路,能讓

qt mfc 對比

mfcqt 風格 任何一個控件都是一個類。想在哪個窗口添加控件時聲名一個控件變量就好。簡單。 這裏主要講 mfcmfc 風格 第一步通過編輯器在主窗口中添加控件時沒有用。像你搞個控件上去運行雖然顯示但沒用。沒有綁定第二步要想父窗口操控這個控件。必須把這個控件聲名成他的變量。id 就是你拖上去的控件 id 類

dubbospringcloud對比面試

問題 但是 兼容性測試 HA blog 面試總結 可能 dubbo csdn 對比:具體見此博客: http://www.sohu.com/a/108961261_468650 dubbo:組裝機 springcloud:品牌機 打個不恰當的比喻:使用Dubbo構建的微服務

實現動畫之CSSJavaScript對比

運行時 理解 controls 進行 中間 PE osi 聰明人 為什麽 曾經某個時期,大多數開發者使用 jQuery 給瀏覽器中的元素添加動畫。讓這個淡化,讓那個擴大,很簡單。隨著互動的項目越來越復雜,移動設備的大量增加,表現性能變得越來越重要。Flash 被拋棄,有天賦

mysql的varchartext對比

mysql varchar textvarchar和text是mysql字符存儲爭議比較多的領域,究竟大字段用那個比較好,我們來對比一下,然後自行選擇.大小對比VARCHAR :varchar在mysql中滿足最大行限制,也就是 65535(16k)字節,在mysql中使用 uft-8(mysql中的 utf