消息中间件——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.mzph.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协议概述及其在医疗多模…

刀片服务器的散热构造方式

刀片服务器的散热构造是其高密度、高性能设计的核心挑战之一。其散热系统需在有限空间内高效处理多个刀片模块产生的集中热量,同时兼顾能耗、噪音和可靠性。以下从模块化架构、核心散热技术、典型方案对比、厂商差异及未来趋势等方面展开分析: 一、模块化散热架构 刀片服务器…