消息中間件——RocketMQ(二)

前言:此篇文章系本人學習過程中記錄下來的筆記,里面難免會有不少欠缺的地方,誠心期待大家多多給予指教。

  • RocketMQ(一)

接上期內容:上期完成了RocketMQ單機部署知識。下面學習RocketMQ集群相關知識,話不多說,直接發車。


一、RocketMQ集群基礎概念

(一)、核心組件?

RocketMQ 集群主要由以下核心組件構成:?

  1. NameServer:RocketMQ 的名稱服務器,為整個集群提供元數據管理服務。它保存了 Topic 與 Broker 的映射關系,以及 Broker 的狀態信息等。NameServer 之間相互獨立,沒有通信和協作關系,采用無狀態設計,方便水平擴展。?
  2. Broker:負責消息的存儲、轉發和查詢等操作。Broker 與 NameServer 保持長連接,定時上報自身信息。根據功能不同,Broker 又可分為 Master 和 Slave 節點,Master 負責處理讀寫請求,Slave 主要用于數據備份和讀請求分擔。(主要集群的就是它)?
  3. Producer:消息生產者,負責將業務消息發送到 RocketMQ 集群。Producer 通過 NameServer 獲取 Topic 對應的 Broker 列表,然后根據負載均衡策略將消息發送到具體的 Broker 節點。?
  4. Consumer:消息消費者,從 Broker 拉取或接收消息并進行業務處理。Consumer 支持集群消費和廣播消費兩種模式,集群消費模式下,同一個 Consumer Group 中的多個 Consumer 實例共同消費 Topic 的消息,提高消費效率;廣播消費模式下,每個 Consumer 實例都會消費 Topic 的所有消息。

(二)、集群架構圖


(三)、集群模式

RocketMQ 支持多種集群模式,常見的有:?

  1. 單 Master 模式:整個集群只有一個 Master 節點,配置簡單,但存在單點故障問題,一旦 Master 宕機,整個集群將無法工作,適用于本地測試或對可靠性要求不高的場景。?
  2. 多 Master 模式:集群包含多個 Master 節點,每個 Master 節點之間相互獨立,無 Slave 節點。這種模式性能較高,但每個 Master 節點宕機時,該節點上的消息無法被消費,適合對可用性要求不是特別高,追求高性能的場景。?
  3. 多 Master 多 Slave 異步復制模式:每個 Master 節點都對應至少一個 Slave 節點,Master 與 Slave 之間采用異步復制方式同步數據。這種模式下,當 Master 宕機時,Slave 可以切換為 Master 繼續提供服務,提高了集群的可用性,但可能存在數據丟失的風險。?
  4. 多 Master 多 Slave 同步雙寫模式:與異步復制模式類似,但 Master 與 Slave 之間采用同步雙寫方式,即只有當 Master 和 Slave 都寫入成功后,才認為消息寫入成功。這種模式保證了數據的強一致性,即使 Master 宕機,也不會出現數據丟失,但性能會受到一定影響。

二、RocketMQ集群搭建

本次學習搭建一個雙主雙從異步復制的Broker集群。本應該是四臺機器,由于硬件文件,所這里使用了兩臺主機來完成集群的搭建。

(一)、前期準備

準備好兩天虛擬機,分別都裝好RocketMQ、JDK。


(二)、修改配置

1、RocketMQ1

①、進入這個目錄rocketmq-all-5.3.2-bin-release/conf/2m-2s-async

修改broker-a.properties文件

-a:代表Master,-s:代表salve。

# 指定整個broker集群的名稱,或者說是RocketMQ集群的名稱
brokerClusterName=DefaultCluster
# 指定master-slave集群的名稱。一個RocketMQ集群可以包含多個master-slave集群
brokerName=broker-a
# master的brokerId為0
brokerId=0
# 指定刪除消息存儲過期文件的時間為凌晨4點
deleteWhen=04
# 指定未發生更新的消息存儲文件的保留時長為48小時,48小時后過期,將會被刪除
fileReservedTime=48
# 指定當前broker為異步復制master
brokerRole=ASYNC_MASTER
# 指定刷盤策略為異步刷盤
flushDiskType=ASYNC_FLUSH
# 指定Name Server的地址
namesrvAddr=MQ1IP:9876;MQ2IP:9876

復制策略:

復制策略是BrokerMasterSlave間的數據同步方式。分為同步復制與異步復制:

同步復制:消息寫入master后,master會等待slave同步數據成功后才向producer返回成功ACK

異步復制:消息寫入master后,master立即向producer返回成功ACK,無需等待slave同步數據成功。

  • 異步復制策略會降低系統的寫入延遲,RT變小,提高了系統的吞吐量。

刷盤策略:

刷盤策略指的是broker中消息的落盤(寫入磁盤)方式,即消息發送到broker內存后消息持久化到磁盤的方式。分為同步刷盤與異步刷盤:

同步刷盤:當消息持久化到broker的磁盤后才算是消息寫入成功。

異步刷盤:當消息寫入到broker的內存后即表示消息寫入成功,無需等待消息持久化到磁盤。

  • 1)異步刷盤策略會降低系統的寫入延遲,RT變小,提高了系統的吞吐量
  • 2)消息寫入到Broker的內存,一般是寫入到了PageCache
  • 3)對于異步刷盤策略,消息會寫入到PageCache后立即返回成功ACK。但并不會立即做落盤操作,而是當PageCache到達一定量時會自動進行落盤。

②、修改broker-b-s.properties

# 指定整個broker集群的名稱,或者說是RocketMQ集群的名稱
brokerClusterName=DefaultCluster
# 指定這是另外一個master-slave集群
brokerName=broker-b
# slave的brokerId為非0
brokerId=1
deleteWhen=04
fileReservedTime=48
# 指定當前broker為slave
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=MQ1IP:9876;MQ2IP:9876
# 指定Broker對外提供服務的端口,即Broker與producer與consumer通信的端口。默認
# 10911。由于當前主機同時充當著master1與slave2,而前面的master1使用的是默認端口。這
# 里需要將這兩個端口加以區分,以區分出master1與slave2
listenPort=10912
# 指定消息存儲相關的路徑。默認路徑為~/store目錄。由于當前主機同時充當著master1與
# slave2,master1使用的是默認路徑,這里就需要再指定一個不同路徑
storePathRootDir=~/store-s
storePathCommitLog=~/store-s/commitlog
storePathConsumeQueue=~/store-s/consumequeue
storePathIndex=~/store-s/index
storeCheckpoint=~/store-s/checkpoint
abortFile=~/store-s/abort


2、RocketMQ2

修改內容跟RocketMQ1差距不大。

①、進入這個目錄rocketmq-all-5.3.2-bin-release/conf/2m-2s-async

修改broker-b.properties文件

②、修改broker-a-s.properties


(三)、啟動服務

1、先啟動NameServer集群,命令都一樣。

nohup sh bin/mqnamesrv &

2、在啟動RocketMQ1與RocketMQ2兩個主機中的broker master注意,它們指定所要加載的配置文件是不同的。

# RocketMQ1
$ nohup sh bin/mqbroker -n xxx.xxx.xxx.xxx:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &
# RocketMQ2 
$ nohup sh bin/mqbroker -n xxx.xxx.xxx:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &

?3、在啟動RocketMQ1與RocketMQ2兩個主機中的broker slave注意,它們指定所要加載的配置文件是不同的。

# RocketMQ1
$ nohup sh bin/mqbroker -n xxx.xxx.xxx:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &
# RocketMQ2
$ nohup sh bin/mqbroker -n xxx.xxx.xxx:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &

4、RocketMQ控制臺驗證?


三、總結

本次學習了RocketMQ 集群的基礎概念、搭建過程。合理選擇集群模式、正確配置參數,可以構建一個高性能、高可靠的 RocketMQ 集群,為分布式系統提供穩定的消息通信服務。在實際應用中,還需要根據業務需求和場景不斷優化 RocketMQ 集群的配置和性能。


ps:努力到底,讓持續學習成為貫穿一生的堅守。學習筆記持續更新中。。。。

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

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

相關文章

pyqt環境配置

文章目錄 1 概述2 PyQt6和PySide6區別3 環境配置4 配置PySide65 配置PyQt66 配置外部工具7 添加模板8 使用pyside6-project構建工程9 常見錯誤10 相關地址 更多精彩內容👉內容導航 👈👉Qt開發 👈👉python開發 &#x1…

金融數據庫轉型實戰讀后感

榮幸收到老友太保科技有限公司數智研究院首席專家林春的簽名贈書。 這是國內第一本關于OceanBase數據庫實際替換過程總結的的實戰書。打個比方可以說是從戰場上下來分享戰斗經驗。讀后感受頗深。我在這里講講我的感受。 第三章中提到的應用改造如何降本。應用改造是國產化替換…

旅游資源網站登錄(jsp+ssm+mysql5.x)

旅游資源網站登錄(jspssmmysql5.x) 旅游資源網站是一個為旅游愛好者提供全面服務的平臺。網站登錄界面簡潔明了,用戶可以選擇以管理員或普通用戶身份登錄。成功登錄后,用戶可以訪問個人中心,進行修改密碼和個人信息管理。用戶管理模塊允許管…

STM32 HAL庫之WDG示例代碼

獨立看門狗(IWDG) 在規定時間內按按鍵喂狗并將LED關閉,若產生看門狗復位則LED打開 初始化獨立看門狗,在main.c中的 MX_IWDG_Init();,也就是iwdg.c中的初始化代碼 void MX_IWDG_Init(void) {/* USER CODE BEGIN IWDG…

【第47節】windows程序的其他反調試手段下篇

目錄 一、利用Hardware Breakpoints Detection 二、PatchingDetection - CodeChecksumCalculation 補丁檢測,代碼檢驗和 三、block input 封鎖鍵盤、鼠標輸入 四、使用EnableWindow 禁用窗口 五、利用ThreadHideFromDebugger 六、使用Disabling Breakpoints 禁…

【筆記ing】AI大模型-03深度學習基礎理論

神經網絡:A neural network is a network or circuit of neurons,or in a modern sense,an artificial neural network,composed of artificial neurons or nodes.神經網絡是神經元的網絡或回路,或者在現在意義上來說,是一個由人工神經元或節…

基于Djiango實現中藥材數據分析與可視化系統

中藥材數據分析與可視化系統 項目截圖 登錄 注冊 首頁 藥材Top20 藥材價格 產地占比 歷史價格 新聞資訊 后臺管理 一、項目概述 中藥材數據分析與可視化系統是一個基于Django框架開發的專業Web應用,致力于對各類中藥材數據進行全面、系統的采集、分析和可視化展示…

【AI飛】AutoIT入門七(實戰):python操控autoit解決csf視頻批量轉換(有點難,AI都不會)

背景: 終極目標:通過python調用大模型,獲得結果,然后根據返回信息,控制AutoIT操作電腦軟件,執行具體工作。讓AI更具有執行力。 已完成部分: 關于python調用大模型的,可以參考之前的…

leetcode 188. Best Time to Buy and Sell Stock IV

目錄 題目描述 第一步,明確并理解dp數組及下標的含義 第二步,分析明確并理解遞推公式 1.求dp[i][j].holding 2.求dp[i][j].sold 第三步,理解dp數組如何初始化 第四步,理解遍歷順序 代碼 題目描述 這道題把第123題推廣為一…

【筆記】【C++】【基礎語法】作用域(scope)、持續時間(duration)和鏈接(linkage)

【筆記】【C】【基礎語法】作用域(scope)、持續時間(duration)和鏈接(linkage) 最近正在復習學習C(查漏補缺ing)。記錄一下學習所得。希望能將所學都整理成一系列的筆記和博客。優先…

Yarn的安裝及環境配置

### Yarn 安裝教程及環境配置步驟 #### 1. 檢查 Node.js 是否已安裝 在安裝 Yarn 前,需確認系統中已經安裝了 Node.js。可以通過以下命令驗證其是否存在并獲取版本號: bash node -v 如果未安裝,則需要先完成 Node.js 的安裝。 --- #### 2…

day2-小白學習JAVA---java第一個程序

java第一個程序 1、新建一個文件,以.java為結尾2、用編輯器打開后寫入代碼(本人寫前端,所以用vscode,也可用其他)3、編譯文件4、運行文件5、HelloWorld代碼解釋6、文檔注釋 1、新建一個文件,以.java為結尾 …

docker部署springboot(eureka server)項目

打jar包 使用maven&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17&…

解讀《人工智能指數報告 2025》:洞察 AI 發展新態勢

美國斯坦福大學 “以人為本人工智能研究院”&#xff08;HAI&#xff09;近日發布的第八版《人工智能指數報告》&#xff08;AI Index Report 2025&#xff09;備受全球矚目。自 2017 年首次發布以來&#xff0c;該報告一直為政策制定者、研究人員、企業高管和公眾提供準確、嚴…

OpenGauss 數據庫介紹

OpenGauss 數據庫介紹 OpenGauss 是華為基于 PostgreSQL 開發的企業級開源關系型數據庫&#xff0c;現已成為開放原子開源基金會的項目。以下是 OpenGauss 的詳細介紹&#xff1a; 一 核心特性 1.1 架構設計亮點 特性說明優勢多核并行NUMA感知架構充分利用現代CPU多核性能行…

使用Trae CN分析項目架構

架構分析后的截圖 A區是打開的項目、B區是源碼區、C區是AI給出當前項目的架構分析結果。 如何用 Trae CN 快速學習 STM32 嵌入式項目架構 在嵌入式開發領域&#xff0c;快速理解現有項目的架構是一項關鍵技能。Trae CN 作為一款強大的分析工具&#xff0c;能幫助開發者高效剖…

MCP協議量子加密實踐:基于QKD的下一代安全通信(2025深度解析版)

一、量子計算威脅的范式轉移與MCP協議改造必要性 1.1 傳統加密體系的崩塌時間表 根據IBM 2025年量子威脅評估報告&#xff0c;當量子計算機達到4000個邏輯量子比特時&#xff08;預計2028年實現&#xff09;&#xff0c;現有非對稱加密體系將在72小時內被完全破解。工業物聯網…

STM32單片機入門學習——第40節: [11-5] 硬件SPI讀寫W25Q64

寫這個文章是用來學習的,記錄一下我的學習過程。希望我能一直堅持下去,我只是一個小白,只是想好好學習,我知道這會很難&#xff0c;但我還是想去做&#xff01; 本文寫于&#xff1a;2025.04.18 STM32開發板學習——第一節&#xff1a; [1-1]課程簡介第40節: [11-5] 硬件SPI讀…

Model Context Protocol (MCP) 開放協議對醫療多模態數據整合的分析路徑【附代碼】

Model Context Protocol (MCP) 作為一種革命性的開放協議,正在重塑醫療領域多模態數據整合的方式。本文將深入分析MCP協議在醫療多模態數據整合中的具體路徑、技術實現、應用場景及未來發展方向,揭示這一協議如何成為連接AI與醫療數據的關鍵橋梁。 MCP協議概述及其在醫療多模…

刀片服務器的散熱構造方式

刀片服務器的散熱構造是其高密度、高性能設計的核心挑戰之一。其散熱系統需在有限空間內高效處理多個刀片模塊產生的集中熱量,同時兼顧能耗、噪音和可靠性。以下從模塊化架構、核心散熱技術、典型方案對比、廠商差異及未來趨勢等方面展開分析: 一、模塊化散熱架構 刀片服務器…