kafka和RocketMQ的區別

今天面試字節被問到的問題,當時沒有回答好,現在再重新梳理一下

兩者都是消息系統,但是kafka已經升級爲了流處理平臺

RocketMQ的出現是因爲kafka不支持在交易、訂單、充值等場景下許多特性,於是阿里編寫了rocketMQ,定位於非日誌的可靠消息傳輸;而kafka誕生的時候定位是日誌傳輸。

數據可靠性

RMQ支持異步實時刷盤、同步刷盤、同步Replication、異步Replication
同步刷盤在單機上可靠性比kafka高,不會因爲操作系統crash,倒是數據丟失
kafka使用異步刷盤、異步Replication
因爲異步,主從切換後存在數據丟失,以及數據不一致的情況

性能對比

 kafka單機寫入tps在百萬/s,消息大小10字節
 RMQ單機7萬/s,單機部署3個Broker,可以跑到12w/S,消息10字節
 原因是kafka的Producer支持多個小消息合併,批量發向Broker;
 這也是kafka適合OLAP的原因,實時性不高

 RMQ不這麼做的原因
	1:Producer通常使用java,緩存過多消息容易GC
	2:Producer調用發送消息接口
	3:Producer通常爲分佈式系統,且每臺機器都是多線程發送,團隊認爲線上的系統單個Producer每秒產生的數量有限,不可能上萬
	4:緩存功能可以有上層業務實現

單機支持的隊列數

kafka單機超過64個隊列、分區。Load會發生明顯飈高,隊列越多,load越高,發送時間變長
RMQ支持5萬個隊列,load不發生明顯變化
kafka一個Topic一個文件,RMQ總共一個文件。

隊列多的好處

- 單機可以創建更多Topic
- 消費者的集羣規模和隊列書成正比,隊列越多Consumer集羣可以越大

消息投遞實時性

Kafka使用短輪詢,實時性取決於輪詢時間
RMQ使用長輪詢,同Push的方式實時性一致,一般幾個毫秒

失敗重試

kakfa不支持重試
RMQ支持定時重試,每次重試時間順延

嚴格的消息順序

kafka支持消息順序,但是一臺宕機,會產生消息混亂
RMQ支持嚴格的消息順序,Broker宕機,發送消息會失敗,不會亂序

定時消息,kafka不支持

分佈式事務消息

kafka不支持、開源版本不支持

消息回溯

kafka可以按照offset來回溯
RMQ可以按照時間回溯精度毫秒,有助重放

消息並行度

kafka並行度依賴Topic分區數,與其一致
RMQ分兩種
	順序消費方式同kafka一樣
	亂序方式取決Consumer的線程數。

消息堆積能力。kafka更強。RMQ支持億級

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章