Kafka、RabbitMQ、RocketMQ消息中間件的對比

来源:https://www.cnblogs.com/nov5026/archive/2018/08/22/9518520.html
-Advertisement-
Play Games

引言 分散式系統中,我們廣泛運用消息中間件進行系統間的數據交換,便於非同步解耦。現在開源的消息中間件有很多,目前對Kafka、RabbitMQ、RocketMQ這三個消息中間件做下對比分析。 摘自:https://blog.csdn.net/wuzhengfei1112/article/details ...


引言

分散式系統中,我們廣泛運用消息中間件進行系統間的數據交換,便於非同步解耦。現在開源的消息中間件有很多,目前對Kafka、RabbitMQ、RocketMQ這三個消息中間件做下對比分析。

 

- - kafka RocketMQ RabbitMQ 數據來源 相關文章
定位 設計定位 系統間的數據流管道,實時數據處理。
例如:常規的消息系統、網站活性跟蹤,監控數據,日誌收集、處理等
非日誌的可靠消息傳輸。
例如:訂單,交易,充值,流計算,消息推送,日誌流式處理,binglog分發等
可靠消息傳輸。和RocketMQ類似。
基礎對比 成熟度 日誌領域成熟  成熟  成熟 
所屬社區/公司 Apache  Alibaba開發,已加入到Apache下 Mozilla Public License 
社區活躍度 來源於網路
API完備性
文檔完備性 來源於網路
開發語言 Scala Java Erlang 
支持協議 一套自行設計的基於TCP的二進位協議 自己定義的一套
(社區提供JMS--不成熟) 
AMQP 
客戶端語言 C/C++、Python、Go、Erlang、.NET、Ruby、Node.js、PHP等 Java Java、C、 C++、 Python、 PHP、Perl 等 
持久化方式 磁碟文件  磁碟文件  記憶體、文件 
可用性、可靠性比較 部署方式 單機/集群 單機/集群 單機/集群
集群管理 zookeeper name server
選主方式 從ISR中自動選舉一個leader 不支持自動選主。通過設定brokername、brokerId實現,brokername相同,brokerid=0時為maser,其他為slave 最早加入集群的broker
可用性 非常高
分散式、主從
非常高
分散式、主從

主從,採用鏡像模式實現,數據量大時可能產生性能瓶頸
rabbitMQ集群部署
http://www.cnblogs.com/knowledgesea/p/6535766.html
RabbitMQ可用性、可靠性分析
http://blog.csdn.net/cadem/article/details/53422912?utm_source=itdadao&utm_medium=referral
主從切換 自動切換
N個副本,允許N-1個失效;master失效以後自動從isr中選擇一個主;
不支持自動切換
master失效以後不能向master發送信息,consumer大概30s(預設)可以感知此事件,此後從slave消費;如果master無法恢復,非同步複製時可能出現部分信息丟失
自動切換
最早加入集群的slave會成為master;因為新加入的slave不同步master之前的數據,所以可能會出現部分數據丟失
數據可靠性 很好
支持producer單條發送、同步刷盤、同步複製、非同步。
很好
producer單條發送,broker端支持同步刷盤、非同步刷盤,同步雙寫,非同步複製。

producer支持同步/非同步ack。支持隊列數據持久化,鏡像模式中支持主從同步
kafka也同步刷盤,但是效率較低
http://jm.taobao.org/2016/04/28/kafka-vs-rocktemq-4/
消息寫入性能 非常好
每條10個位元組測試:百萬條/s
很好
每條10個位元組測試:單機單broker約7w/s,單機3個broker約12w/s
RAM約為RocketMQ的1/2,
Disk的性能約為RAM性能的1/3
數據來源於網路
單條消息的數據量越小,性能對比時kafka表現越好
kafka vs RocktMQ: https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines
kafka vs RocktMQ VS RabbitMQ 
http://www.cnblogs.com/felixzh/p/6198070.html
http://ju.outofmemory.cn/entry/177937
性能的穩定性 隊列/分區多時性能不穩定,明顯下降。
消息堆積時性能穩定
隊列較多、消息堆積時性能穩定 消息堆積時,性能不穩定、明顯下降
單機支持的隊列數 單機超過64個隊列/分區,Load會發生明顯的飆高現象,隊列越多,load越高,發送消息響應時間變長 單機支持最高5萬個隊列,Load不會發生明顯變化 依賴於記憶體 數據來源於網路測評
kafka新能降低是因為topic增多時,順序寫變成了隨機寫
Kafka vs RocketMQ: Topic數量對單機性能的影響
http://jm.taobao.org/2016/04/07/kafka-vs-rocketmq-topic-amout/?utm_source=tuicool&utm_medium=referral
堆積能力 非常好
消息存儲在log中,每個分區由一個或多個segment  log文件
非常好
所有消息存儲在同一個commit log中
一般
生產者、消費者正常時,性能表現穩定;消費者不消費時,性能不穩定
http://www.cnblogs.com/purpleraintear/p/6033136.html
複製備份 消息先寫入leader的log,followers從leader中pull數據,pull到數據以後先ack leader,然後寫入log中。
ISR中維護與leader同步的列表,落後太多的follwer會被刪除掉
同步雙寫
非同步複製:slave啟動線程從master中拉數據
普通模式下不複製;
鏡像模式下:消息先到mster,然後寫到slave上。加入集群之前的消息不會被覆制到新的slave上。
消息投遞實時性 毫秒級
具體由consumer輪詢間隔時間決定
毫秒級
支持pull、push兩種模式,延時通常在毫秒級
毫秒級
功能對比 順序消費 支持順序消費
但是一臺Broker宕機後,就會產生消息亂序(來自網上,尚未找到原因)
支持順序消費
在順序消息場景下,消費失敗時消費隊列將會暫停
支持順序消費
定時消息 不支持 開源版本僅支持定時Level 不支持
事務消息 不支持 支持 不支持
Broker端消息過濾 不支持 支持
通過tag過濾,類似於子topic
不支持
消息查詢 不支持 支持
根據MessageId查詢
支持根據MessageKey查詢消息
不支持
消費失敗重試 不支持失敗重試
offset存儲在consumer中,無法保證。
0.8.2版本後支持將offset存儲在zk中
支持失敗重試
offset存儲在broker中
支持失敗重試
消息重新消費 支持通過修改offset來重新消費 支持按照時間來重新消息
發送端負載均衡 可自由指定 可自由指定 需要單獨loadbalancer支持
 消費並行度 消費並行度和分區數一致 順序消費:消費並行度和分區數一致
亂序消費:消費伺服器的消費線程數之和
可一次抓取多條一起消費。
鏡像模式下其實也是從master消費
消費方式 consumer pull consumer pull /broker push broker push
批量發送 支持
預設producer緩存、壓縮,然後批量發送
不支持 不支持
消息清理 指定文件保存時間,過期刪除 指定文件保存時間,過期刪除 Consumer ack以後,消息將被標記為刪除
可用記憶體少於40%(預設),觸發gc,gc時找到相鄰的兩個文件,合併right文件到left。
運維 系統維護 Scala語言開發,維護成本高 java語言開發,維護成本低 Erlang語言開發,維護成本高
部署依賴 zookeeper nameserver Erlang環境
管理後臺 官網不提供,第三方開源管理工具可供使用;不用重新開發 官方提供,rocketmq-console 官方提供rabbitmqadmin kafka管理後臺比較;http://top.jobbole.com/31084/
管理後臺功能 Kafka Web Conslole
Brokers列表;Kafka 集群中 Topic列表,及對應的Partition、LogSize等信息;Topic對應的Consumer Groups、Offset、Lag等信息;
生產和消費流量圖、消息預覽
KafkaOffsetMonitor:
Kafka集群狀態;Topic、Consumer Group列表;圖形化展示topic和consumer之間的關係;圖形化展示consumer的Offset、Lag等信息
Kafka Manager
管理幾個不同的集群;監控集群的狀態(topics, brokers, 副本分佈, 分區分佈);產生分區分配(Generate partition assignments)基於集群的當前狀態;重新分配分區
Cluster、Topic、Connection、NameServ、Message、Broker、Offset、Consumer overview、connections、channels、exchanges、queues、admin
總結 優點 1、在高吞吐、低延遲、高可用、集群熱擴展、集群容錯上有非常好的表現;
2、producer端提供緩存、壓縮功能,可節省性能,提高效率。
3、提供順序消費能力
4、提供多種客戶端語言
5、生態完善,在大數據處理方面有大量配套的設施。
1、在高吞吐、低延遲、高可用上有非常好的表現;消息堆積時,性能也很好。
2、api、系統設計都更加適在業務處理的場景。
3、支持多種消費方式。
4、支持broker消息過濾。
5、支持事務。
6、提供消息順序消費能力;consumer可以水平擴展,消費能力很強。
7、集群規模在50台左右,單日處理消息上百億;經歷過大數據量的考驗,比較穩定可靠。
1、在高吞吐量、高可用上較前兩者有所不如。
2、支持多種客戶端語言;支持amqp協議。
3、由於erlang語言的特性,性能也比較好; 使用RAM模式時,性能很好。
4、管理界面較豐富,在互聯網公司也有較大規模的應用;
數據來自網路
缺點 1、消費集群數目受到分區數目的限制。
2、單機topic多時,性能會明顯降低。
3、不支持事務
1、相比於kafka,使用者較少,生態不夠完善。消息堆積、吞吐率上也有所不如。
2、不支持主從自動切換,master失效後,消費者需要一定的時間才能感知。
3、客戶端只支持Java
1、erlang 語言難度較大。集群不支持動態擴展。
2、不支持事務、消息吞吐能力有限
3、消息堆積時,性能會明顯降低

 

摘自:https://blog.csdn.net/wuzhengfei1112/article/details/78069645


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • wxSearch優雅的微信小程式搜索框 一、功能 支持自定義熱門key 支持搜索歷史 支持搜索建議 支持搜索歷史(記錄)緩存 二、使用 1、將wxSearch文件夾整個拷貝到根目錄下 2、引入 3、使用3.1 wxml文件這裡有兩種模板:一種為wxSearch作者提供的模板,另一種是weui提供的模 ...
  • 在ES6中我們有兩種定義變數的方式:let const let特點: 1.let定義時不會進行變數聲明提升 2.變數不允許被重覆定義 3.變數不可以被刪除 4.在for迴圈當中用let定義i 迴圈時可以保存 i 的值 5.在塊級元素中用let定義的變數只能在當前塊級作用域中使用(註:凡是用{}包裹的 ...
  • 1. 2.在項目根目錄新建postcss.config.js文件,並對postcss進行配置: webpack編譯時如果出現No PostCSS Config的時候可以嘗試用這兩個方法來試試 ...
  • if (window["context"] == undefined) { if (!window.location.origin) { window.location.origin = window.location.protocol + "//" + window.location.hostna... ...
  • 一、新建項目使用scss 使用ng new 項目名稱創建項目的時候 ng new my-app --skip-install --prefix mpr --style=scss 二、已有項目使用scss 首先,安裝node-sass包 npm install node-sass --save-dev ...
  • docker與虛擬機有何不同 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。 容器技術有很多種,Docker是目前最流行的一種,網易雲也在使用Docker。伺服器虛擬化解決的核心問題是資源 ...
  • 1、高內聚 首先我們來看看內聚的含義:軟體含義上的內聚其實是從化學中的分子的內聚演變過來的,化學中的分子間的作用力,作用力強則表現為內聚程度高。在軟體中內聚程度的高低,標識著軟體設計的好壞。 我們在進行架構設計時的內聚高低是指,設計某個模塊或者關註點時,模塊或關註點內部的一系列相關功能的相關程度的高 ...
  • 博文來源:http://www.fhadmin.org/webnewsdetail1.html 即時通訊:支持好友,群組,發圖片、文件,消息聲音提醒,離線消息,保留聊天記錄 工作流模塊 1.模型管理 :web線上流程設計器、預覽流程xml、導出xml、部署流程 2.流程管理 :導入導出流程資源文件、 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...