【RockeMQ】第2節|RocketMQ快速實戰以及核?概念詳解(二)

升級Dledger高可用集群

一、主從架構的不足與Dledger的定位

  1. 主從架構缺陷
    • 數據備份依賴Slave節點,但無自動故障轉移能力,Master宕機后需人工切換,期間消息可能無法讀取。
    • Slave僅存儲數據,無法主動升級為Master響應請求,集群高可用性不足。
  2. Dledger的核心價值
    • 基于Raft協議實現自動選舉數據強一致性,支持Leader節點故障時自動切換,保障服務連續性。
    • 解決傳統主從架構的“單點故障”和“腦裂問題”,提升集群可靠性。

二、Dledger集群架構與原理

  1. 角色分工
    • Leader:唯一主節點,處理客戶端請求,通過日志復制同步數據到Follower。
    • Follower:從節點,接收并持久化Leader數據,參與選舉。
  2. Raft協議關鍵機制
    • 選舉機制:候選人需獲得超過半數節點投票才能成為Leader,確保集群唯一主節點。
    • 任期(Term):每個選舉周期生成唯一任期號,避免舊Leader干擾新選舉。
    • 心跳機制:Leader定期發送心跳維持統治,超時則觸發重新選舉。
    • 日志復制:Leader數據需多數Follower確認后才提交,保障強一致性。
  3. 腦裂問題解決
    • 通過Raft協議的選舉規則和多數確認機制,確保同一時刻僅存在一個有效Leader,避免多主沖突。

三、Dledger集群搭建步驟(以3節點為例)

  1. 環境配置
    • 3臺服務器(worker1、worker2、worker3),已部署NameServer集群,修改/etc/hosts綁定主機名。
    • 每個節點創建獨立存儲目錄(如/app/rocketmq/storeDledger),避免數據混淆。
  2. 核心配置文件
    • conf/dledger/broker.conf中配置:
brokerClusterName=RaftCluster       # 集群名(統一標識)  
brokerName=RaftNode00              # 節點組名(同一集群內一致)  
listenPort=30911                   # 服務端口(避免與主從架構沖突)  
namesrvAddr=worker1:9876;worker2:9876;worker3:9876  # NameServer地址  
enableDLegerCommitLog=true         # 啟用Dledger功能  
dLegerGroup=RaftNode00             # Dledger組名(與brokerName一致)  
dLegerPeers=n0-worker1:40911;n1-worker2:40911;n2-worker3:40911  # 節點列表(格式:id-主機:端口)  
dLegerSelfId=n0                    # 當前節點ID(需在dLegerPeers中唯一,worker1設n0,worker2設n1,worker3設n2)  
  1. 啟動與驗證
    • 各節點執行命令啟動Broker:
nohup bin/mqbroker -c conf/dledger/broker.conf &  
    • 通過Dashboard或mqadmin命令查看集群狀態,確認1個Leader和2個Follower。
    • 模擬故障:停止Leader節點,觀察剩余節點是否自動選舉新Leader(需保證≥2節點存活)。

四、Dledger與主從架構對比

維度

主從架構

Dledger集群

故障恢復

人工切換,服務中斷

自動選舉Leader,秒級恢復

數據一致性

異步復制(可能丟失少量數據)

強一致性(多數節點確認)

腦裂風險

存在

徹底避免(Raft協議保障)

運維成本

高(需手動管理主從狀態)

低(自動化管理)

性能影響

中(選舉和日志復制開銷)

五、注意事項與最佳實踐

  1. 節點數量建議
    • 部署奇數個節點(如3/5個),容錯能力為(n-1)/2(3節點可容忍1個故障,5節點可容忍2個故障)。
  2. 性能調優
    • 調整sendMessageThreadPoolNums為服務器CPU核心數,提升消息處理吞吐量。
    • 啟用異步刷盤(flushDiskType=ASYNC_FLUSH)降低延遲,但需權衡數據可靠性。
  3. 生產環境建議
    • 關閉自動創建Topic(autoCreateTopicEnable=false),避免資源濫用。
    • 結合Prometheus+Grafana監控Leader選舉耗時、消息復制延遲等指標。

總結RocketMQ的運行架構

一、核心組件與功能

  1. NameServer
    • 定位:集群的“大腦”,提供輕量級路由管理,不存儲狀態,節點間相互獨立。
    • 功能
      • 接收Broker注冊信息,維護Topic與Broker的路由關系。
      • 為Producer和Consumer提供實時路由查詢服務。
  2. Broker
    • 定位:核心數據節點,負責消息存儲、轉發與查詢,類似“硬盤”角色。
    • 分類
      • Master:處理讀寫請求,支持數據同步到Slave。
      • Slave:備份Master數據,故障時可切換為只讀節點(主從架構)或自動升級為Leader(Dledger集群)。
  3. Client(生產者/消費者)
    • 定位:集群的“輸入輸出設備”,通過NameServer獲取路由,與Broker直接交互。
    • 關鍵邏輯
      • Producer:按負載均衡策略將消息發送到Topic的多個MessageQueue。
      • Consumer:通過Pull或Push模式從MessageQueue拉取消息,支持廣播模式和集群模式。

二、消息路由與存儲機制

  1. Topic與MessageQueue
    • Topic:邏輯消息分類,數據分散存儲在多個MessageQueue中(默認8個隊列)。
    • MessageQueue:物理存儲單元,具有FIFO特性,消息按offset順序存儲。
  2. 路由流程
    • Producer發送消息時,通過NameServer獲取Topic對應的Broker列表,按輪詢等策略選擇MessageQueue。
    • Consumer消費時,根據分配策略(如平均分配)綁定MessageQueue,維護本地消費進度(offset)。

三、集群模式對比

模式

主從架構

Dledger集群

路由更新

Broker主動向NameServer注冊

同上

高可用性

依賴人工切換

自動故障轉移

適用場景

中小規模業務、非核心場景

大規模集群、金融級高可靠場景

理解RocketMQ的消息模型

一、核心概念

  1. 消息(Message)
    • Topic(主題)、Tag(標簽)、Body(內容)組成,支持屬性擴展(如事務ID、延遲時間)。
  2. 消費者組(Consumer Group)
    • 同一組內消費者協同消費,支持負載均衡(集群模式)或獨立消費(廣播模式)。
    • 消費進度以組為單位存儲,不同組可獨立消費同一Topic。

二、消息投遞模式

  1. 集群模式(默認)
    • 多個消費者實例分攤消費壓力,每條消息僅被組內一個實例處理。
    • 應用場景:訂單處理、實時數據分析。
  2. 廣播模式
    • 每條消息被組內所有消費者實例消費,進度獨立管理。
    • 應用場景:配置更新通知、日志廣播。

三、消息存儲與消費流程

  1. 存儲流程
    • Producer發送消息至Broker的MessageQueue,持久化到CommitLog文件。
    • Broker定期將CommitLog數據刷盤,并構建索引文件(ConsumeQueue、IndexFile)加速查詢。
  2. 消費流程
    • Consumer從NameServer獲取Topic路由,拉取MessageQueue中的消息。
    • 消費成功后,更新本地offset(集群模式同步到Broker,廣播模式存儲于本地文件)。

四、與Kafka的對比

特性

RocketMQ

Kafka

消息順序

單個MessageQueue內有序

單個Partition內有序

事務支持

原生支持(兩階段提交)

需外部系統協調

多語言客戶端

官方支持Java、C++、Go等

依賴社區實現

管理工具

提供Dashboard可視化界面

依賴命令行或開源工具(如Kafka UI)

章節總結

一、核心知識回顧

  1. 快速實戰
    • 掌握RocketMQ單機、主從、Dledger集群的搭建流程,調整JVM參數適應資源限制。
    • 使用命令行工具(tools.sh)和Java API實現消息收發,結合Dashboard監控集群狀態。
  2. 架構設計
    • NameServer無狀態集群提供路由服務,Broker通過主從或Dledger實現高可用。
    • 消息模型基于Topic和MessageQueue,支持靈活的消費模式與負載均衡策略。
  3. 核心特性
    • 事務消息、延遲隊列、死信隊列等功能滿足復雜業務需求(后續章節深入)。
    • Dledger集群通過Raft協議解決傳統主從架構的高可用短板,適合金融級場景。

二、延伸學習建議

  1. 對比分析
    • 結合Kafka和RabbitMQ,理解不同MQ在吞吐量、可靠性、功能豐富度上的差異。
  2. 生產實踐
    • 嘗試在Docker/Kubernetes中部署RocketMQ集群,實踐資源編排與彈性擴縮容。
    • 實現基于RocketMQ的分布式事務(如訂單支付場景),結合本地事務表保證最終一致性。
  3. 源碼閱讀
    • org.apache.rocketmq.broker包入手,理解Broker啟動流程與消息存儲邏輯。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/908677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/908677.shtml
英文地址,請注明出處:http://en.pswp.cn/news/908677.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【會員專享數據】2017-2024年我國分省的10米精度土地覆蓋數據

土地覆蓋數據是我們在各項研究中都非常常用的數據,之前我們分享過2017-2024年全球范圍的10米精度土地覆蓋數據(均可查看之前的文章獲悉詳情)!該數據提供瓦片形式,也就是全球的數據沒有拼成一張圖,很多小伙伴…

通過css實現正方體效果

效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* css實…

Java并發編程-理論基礎

Java并發編程-理論基礎 1、什么是進程&#xff1f; 進程&#xff08;Process&#xff09;是計算機中的程序關于某數據集合上的一次運行活動&#xff0c;是系統進行資源分配的基本單位&#xff0c;是操作系統結構的基礎。在早期面向進程設計的計算機結構中&#xff0c;進程是程…

Tornado WebSocket實時聊天實例

在 Python 3 Tornado 中使用 WebSocket 非常直接。你需要創建一個繼承自 tornado.websocket.WebSocketHandler 的類&#xff0c;并實現它的幾個關鍵方法。 下面是一個簡單的示例&#xff0c;演示了如何創建一個 WebSocket 服務器&#xff0c;該服務器會接收客戶端發送的消息&a…

模塊化架構下的前端調試體系建設:WebDebugX 與多工具協同的工程實踐

隨著前端工程化的發展&#xff0c;越來越多的項目采用模塊化架構&#xff1a;單頁面應用&#xff08;SPA&#xff09;、微前端、組件化框架等。這類架構帶來了良好的可維護性和復用性&#xff0c;但也帶來了新的調試挑戰。 本文結合我們在多個模塊化項目中的真實經驗&#xff…

高考:如何合理選擇學科、專業以及職業

如何合理選擇學科、專業以及職業 一、自我認知&#xff1a;明確自身興趣與優勢&#xff08;一&#xff09;興趣探索&#xff08;二&#xff09;能力評估&#xff08;三&#xff09;價值觀與目標 二、外部調研&#xff1a;深入了解學科、專業與職業&#xff08;一&#xff09;學…

【新品解讀】一板多能,AXRF49 定義新一代 RFSoC FPGA 開發平臺

“硬件系統龐雜、調試周期長” “高頻模擬前端不穩定&#xff0c;影響采樣精度” “接收和發射鏈路難以同步&#xff0c;難以擴展更多通道” “數據流量大&#xff0c;處理與存儲跟不上” 這些是大部分客戶在構建多通道、高頻寬的射頻采樣鏈路時&#xff0c;面臨的主要問題。…

實現仿中國婚博會微信小程序

主要功能&#xff1a; 1、完成底部標簽導航設計、首頁海報輪播效果設計和宮格導航設計&#xff0c;如圖1所示 2、在首頁里&#xff0c;單擊全部分類宮格導航的時候&#xff0c;會進入到全部分類導航界面&#xff0c;把婚博會相關內容的導航集成到一個界面里&#xff0c;如圖2…

MySQL強化關鍵_020_SQL 優化

目 錄 一、order by 優化 1.未添加索引 2.添加索引 3.復合索引默認升序排列 4.復合索引降序排列 5.復合索引升序降序排列并用 6.總結 二、group by 優化 1.未添加索引 2.添加索引 3.添加復合索引 三、limit 優化 四、主鍵優化 1.主鍵設計原則 五、insert 優化…

湖北理元理律師事務所視角:企業債務優化的三維平衡之道

核心提示&#xff1a;債務優化的本質不是消滅債務&#xff0c;而是在法律框架內重建財務可持續性。 一、企業債務危機的典型誤區 某制造企業主曾向我坦言&#xff1a;“用新貸還舊貸3年&#xff0c;債務從200萬滾到500萬。”這類案例暴露出企業債務處置的共性痛點&#xff1a…

【Ragflow】27.RagflowPlus(v0.4.1):小版本迭代,問題修復與功能優化

概述 RagflowPlus v0.4.0 在發布后&#xff0c;收到了積極的反饋&#xff0c;同時也包含一些問題。 本次進行一輪小版本更新&#xff0c;發布 v0.4.1 版本&#xff0c;對已知問題進行修復&#xff0c;并對部分功能進行進一步優化。 開源地址&#xff1a;https://github.com/…

【hadoop】Flink安裝部署

一、單機模式 步驟&#xff1a; 1、使用XFTP將Flink安裝包flink-1.13.5-bin-scala_2.11.tgz發送到master機器的主目錄。 2、解壓安裝包&#xff1a; tar -zxvf ~/flink-1.13.5-bin-scala_2.11.tgz 3、修改文件夾的名字&#xff0c;將其改為flume&#xff0c;或者創建軟連接…

Linux 下 ChromeDriver 安裝

個人博客地址&#xff1a;Linux 下 ChromeDriver 安裝 | 一張假鈔的真實世界 Selenium 是一個用于 Web 應用程序測試的工具。可以通過它驅動瀏覽器執行特定的操作&#xff0c;如點擊、下滑、資源加載與渲染等。該工具在爬蟲開發中也非常有幫助。Selenium 需要通過瀏覽器驅動操…

Canal環境搭建并實現和ES數據同步

作者&#xff1a;田超凡 日期&#xff1a;2025年6月7日 Canal安裝&#xff0c;啟動端口11111、8082&#xff1a; 安裝canal-deployer服務端&#xff1a; https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…

STM32使用土壤濕度傳感器

1.1 介紹&#xff1a; 土壤濕度傳感器是一種傳感裝置&#xff0c;主要用于檢測土壤濕度的大小&#xff0c;并廣泛應用于汽車自動刮水系統、智能燈光系統和智能天窗系統等。傳感器采用優質FR-04雙料&#xff0c;大面積5.0 * 4.0厘米&#xff0c;鍍鎳處理面。 它具有抗氧化&…

鎖的藝術:深入淺出講解樂觀鎖與悲觀鎖

在多線程和分布式系統中&#xff0c;數據一致性是一個核心問題。鎖機制作為解決并發沖突的重要手段&#xff0c;被廣泛應用于各種場景。樂觀鎖和悲觀鎖是兩種常見的鎖策略&#xff0c;它們在設計理念、實現方式和適用場景上各有特點。本文將深入探討樂觀鎖和悲觀鎖的原理、實現…

Jinja2深度解析與應用指南

1. 概念與用途 1.1 核心概念 Jinja2是Python生態中功能強大的模板引擎&#xff0c;采用邏輯與表現分離的設計思想&#xff1a; 模板&#xff1a;包含靜態內容和動態占位符的文本文件&#xff08;.j2后綴&#xff09;渲染&#xff1a;將模板與數據結合生成最終文本的過程上下…

Ubuntu20.04中 Redis 的安裝和配置

Ubuntu20.04 中 Redis 的安裝和配置 Ubuntu 安裝 MySQL 及其配置 1. Redis 的安裝 更新系統包列表并安裝 Redis &#xff1a; # 更新包管理工具 sudo apt update# -y&#xff1a;自動確認所有提示&#xff08;非交互式安裝&#xff09; sudo apt install -y redis-server測…

Sklearn 機器學習 缺失值處理 填充數據列的缺失值

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 ??使用 Scikit-learn 處理數據缺失值的完整指南 在機器學習項目中,數據缺失是不可避…

Unity中如何播放視頻

1.創建一個原始圖像并調整布局平鋪整個畫布 2.創建自定義紋理并調整自定義紋理大小 3.添加視頻播放組件 4.將準備好的視頻素材拖入到視頻剪輯中 5.將自定義紋理拖入到目標紋理中 6.將自定義紋理拖入到原始圖像的紋理中 最后運行游戲&#xff0c;即可播放視頻 總結&#xff1a;