RocketMQ 主题与队列的协同作用解析(既然队列存储在不同的集群中,那要主题有什么用呢?)---管理命令、配置安装

 学习之前呢需要会使用linux的基础命令

一.RocketMQ 主题与队列的协同作用解析

在 RocketMQ 中,‌主题(Topic)‌与‌队列(Queue)‌的协同设计实现了消息系统的逻辑抽象与物理存储分离。虽然队列实际存储在不同集群的 Broker 节点上,但主题作为逻辑层面的核心单元,仍具有不可替代的作用:

1. ‌主题是消息的逻辑分类与路由标识
  • 逻辑聚合‌:主题将同一类业务消息聚合为逻辑单元(例如订单消息归入 OrderTopic),生产者只需关注发送到哪个主题,无需感知底层队列的物理分布。
  • 路由依据‌:消息通过主题名称路由到对应集群的队列中。例如,生产者发送到 PaymentTopic 的消息会被自动分配到该主题关联的队列(可能分布在多个集群)。
  • 跨集群协同‌:若队列分布在多个集群,主题的元数据(如队列分布规则)由 NameServer 统一管理,确保生产者/消费者能准确找到目标队列。

2. ‌主题实现消息的订阅与消费隔离
  • 订阅关系管理‌:消费者通过订阅主题来接收消息,而非直接绑定队列。即使队列分布在多个集群,消费者组仍可通过主题名称统一订阅,RocketMQ 自动完成队列分配和负载均衡。
  • 权限控制‌:主题支持独立的权限配置(如读写权限),实现不同业务消息的访问隔离。例如,财务系统仅能访问 FinanceTopic,与订单系统隔离。
  • Tag 过滤扩展‌:在主题基础上,通过 Tag 进一步细分消息类型(如 OrderTopic:TagA),消费者可选择性订阅特定 Tag,减少无关消息处理。

3. ‌主题为运维提供统一管理入口
  • 队列动态扩展‌:当集群扩容时,通过调整主题的队列数量(如从 8 队列增至 16 队列),新队列可自动分配到新增集群的 Broker,无需修改业务代码。
  • 监控与告警‌:主题级别的监控指标(如消息堆积量、消费 TPS)便于快速定位问题。例如,InventoryTopic 的消费延迟告警可直接关联到库存业务。
  • 数据生命周期‌:主题支持独立的消息保留策略(如保存 3 天),不同业务可按需配置,避免全局策略的局限性。
4. ‌主题与队列的协同模型
维度主题(Topic)队列(Queue)
定位逻辑分类单元,定义消息身份与权限物理存储单元,实际承载消息数据
扩展性通过增加队列数量实现横向扩展依赖 Broker 集群扩容提升单队列容量
消费模式支持集群消费(单队列单消费者)或广播消费仅作为存储载体,不直接决定消费模式
运维操作配置权限、Tag 规则、保留策略等调整副本数、存储路径、故障迁移等

实际场景示例

  • 场景‌:电商系统的订单消息(OrderTopic)需要支持每秒 10 万条吞吐量。
  • 实现‌:
    1. 创建 OrderTopic 并设置 32 个队列。
    2. 将队列分布在 4 个集群的 Broker 节点上(每个集群 8 队列)。
    3. 消费者组订阅 OrderTopic,RocketMQ 自动将 32 个队列均分给消费者实例。
    4. 当某个集群故障时,NameServer 将故障队列的路由指向其他集群的副本队列,保障高可用

小结

主题的核心价值在于‌逻辑抽象‌,它屏蔽了底层队列的物理复杂性,同时提供业务层面的统一管理入口。队列的分布式存储解决的是‌性能与可靠性问题‌,而主题则定义了消息的‌业务语义与协作规则‌,两者共同构成 RocketMQ 高并发、高可用的基石。

二.RocketMQ管理命令 

1、updateTopic

作用:修改或创建一个Topic

命令:mqadmin updateTopic -b | -c [-h] [-n ] [-o ] [-p ] [-r ] [-s ] -t [-u ] [-w ]

参数:

  • -n: name server地址列表
  • -c: cluster 名称,表示topic 建在该集群
  • -t: 设置topic名称
  • -h: 打印help信息
  • -o: 设置topic是否为有序的 取值:true、false(默认)
  • -p: 设置topic的权限

示例: 

 mqadmin updateTopic -n localhost:9876 -c DefaultCluster -t testtopic

2、deleteTopic

作用:从broker和nameserver删除topic 

命令:mqadmin deleteTopic -c [-h] [-n ] -t

参数:

  • -n: name server地址列表
  • -c: cluster 名称,表示topic 建在该集群
  • -t: 设置topic名称
  • -h: 打印help信息

示例

mqadmin deleteTopic -n localhost:9876 -c DefaultCluster -t testtopic

3、topicList

作用:从nameserver列出所有topic

命令:mqadmin topicList [-c] [-h] [-n ]

参数:

  • -n: name server地址列表
  • -c: cluster 名称,表示topic 建在该集群
  • -h: 打印help信息

示例

mqadmin topicList -n localhost:9876

4、topicStatus

作用:检查topic的状态信息

命令:mqadmin topicStatus [-h] [-n ] -t

参数:

  • -n: name server地址列表
  • -c: cluster 名称,表示topic 建在该集群
  • -t: 设置topic名称
  • -h: 打印help信息

 示例

mqadmin topicStatus -n localhost:9876 -t testtopic

5、cleanUnusedTopic

作用:清理未使用的topic

命令:mqadmin cleanUnusedTopic [-b ] [-c ] [-h] [-n ]

参数:

  • -n: name server地址列表
  • -b: broker地址
  • -c: 集群名称
  • -h: 打印help信息

6关闭namesrv和broker服务

mqshutdown namesrv

mqshutdown broker

三.RocketMQ安装与配置 

1、首先修改环境变量 

vim /etc/profile
# 文件末尾追加改信息
export ROCKETMQ_HOME=/usr/local/rocketmq
export PATH=$PATH:$ROCKETMQ_HOME/bin
# 生效环境变量
source /etc/profile

2、解压文件

unzip rocketmq-all-5.1.4-bin-release.zip

我们上传安装包至opt目录下,使用该命令将其解压至opt目录下,最后使用mv命令对其进行位置移动和改名-----/usr/local/rocketmq

# 解压到当前目录(/opt)
unzip rocketmq-all-5.0.0-bin-release.zip# 将解压后的目录移动到/usr/local
mv rocketmq-all-5.0.0-bin-release /usr/local/# 改名
mv rocketmq-all-5.0.0-bin-release rocketmq

 进入bin目录如下

3、启动NameServer 

nohup sh mqnamesrv &

 

4、启动broker 

nohup sh ./mqbroker -n localhost:9876 & 

使用jps命令查看后发现broker未启动

启动成功后的输出结果 

使用 cat nohup.out 查看日志如下

 很常见的问题

1、java.lang.IllegalAccessError: class org.apache.rocketmq.common.UtilAll (in unnamed module @0x58acb723) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module 

解决:添加启动参数

修改runbroker文件,添加红色参数 $JAVA ${JAVA_OPT} --add-exports=java.base/sun.nio.ch=ALL-UNNAMED $@

2、堆空间初始值太大也报错 

修改文件runbroker.sh(将光标位置修改为如下数字即可)

通过上述修改,将初始堆内存512M,最大堆内存设置为512M,新生代(Java中用于存储创建对象的部分)设置为256M,修改完成后便可以正常启动以及查看日志。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三菱FX PLC频率采集

基于高速计数器,计算从X点输入方波个数,定时提取计数器值,换算得到频率。直接通过定时器数值判断来实现定时计数的精度不高,提高精度需要考虑定时中断方式。 初始化寄存器,通过M8235,M8236复位来选择C235&a…

一种专用车辆智能配电模块的设计解析:技术革新与未来展望

关键词:智能配电模块、STM32、CAN总线、电子开关、新能源汽车 引言:传统配电系统的痛点与智能化转型 传统配电系统依赖继电器和保险丝,存在体积大、寿命短、智能化低等缺陷(如图1)。而新能源汽车和无人驾驶技术对配电…

python——异常

1、定义 异常是在代码执行过程中发生的,它会影响到程序的正常运行。python程序不会自动来进行异常处理。python中常见异常父类:Exception。 2、常见异常 TypeError:类型错误异常。ValueError:值的异常。KeyError:键…

深入浅出Sentinel:分布式系统的流量防卫兵

引言 在当今的微服务架构和分布式系统中,服务间的依赖关系错综复杂,一个服务的故障可能会像多米诺骨牌一样引发整个系统的崩溃。如何有效地保护系统免受突发流量、不稳定依赖服务的影响,成为每个架构师和开发者必须面对的挑战。今天&#xf…

leetcode0106. 从中序与后序遍历序列构造二叉树-medium

1 题目:从中序与后序遍历序列构造二叉树 官方标定难度:中 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入…

【Pandas】pandas DataFrame rsub

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…

【信息系统项目管理师】高分论文:论人力资源管理与成本管理(医院信息系统)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文一、规划人力资源管理二、组建项目团队三、建设项目团队四、管理项目团队论文 一个完善的医院信息系统通常由上百个子系统构成,而这些系统随着医院发展需求逐步建设的,他们来源于不同厂家,基于不同的技…

【python】如何将python程序封装为cpython的库

python程序在发布时,往往会打包为cpython的库,并且根据应用服务器的不同架构(x86/aarch64),以及python的不同版本,封装的输出类型也是非常多。本文介绍不同架构指定python下的代码打包方式: 首…

Android 14 修改侧滑手势动画效果

涉及关键类 SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt 修改如下: 一,覆盖系统的默认手势效果 SystemUI/src/com/andro…

RHEL与CentOS:从同源到分流的开源操作系统演进

RHEL与CentOS:从同源到分流的开源操作系统演进 一、核心关系:源代码的重构与社区化 RHEL(Red Hat Enterprise Linux)与CentOS(Community ENTerprise Operating System)的关系可以概括为“同源异构”。RHE…

EFISH-SBC-RK3588 —— 厘米级定位 × 旗舰算力 × 工业级可靠‌

一、核心参数速览‌ ‌类别‌ ‌技术规格‌ ‌处理器‌ RK3588 八核(4Cortex-A762.4GHz 4Cortex-A551.8GHz) Mali-G610 GPU 6 TOPS NPU ‌定位能力‌ 双天线差分 GNSS(GPS/北斗/GLONASS/Galileo),支持 RTK 动态…

【Unity 与c++通信】Unity与c++通信注意事项,参数传递

一、在Unity中使用c代码 Unity想调用C代码,则需要c开发人员打包成so库。 在Unity中通过DllImport,和dll一样调用。 需要注意的点: C代码需要extern"C"来封装成dll 因为unity默认使用c语言调用外部接口,会对c代码进行命…

DeepSeek+Mermaid:轻松实现可视化图表自动化生成(附实战演练)

目录 一、引言:AI 与图表的梦幻联动二、DeepSeek:大语言模型新星崛起2.1 DeepSeek 全面剖析2.2 多场景应用示例2.2.1 文本生成2.2.2 代码编写 三、Mermaid:代码式图表绘制专家3.1 Mermaid 基础探秘3.2 语法与图表类型详解3.2.1 流程图&#x…

霍格软件测试-JMeter高级性能测试一期

课程大小:32.2G 课程下载:https://download.csdn.net/download/m0_66047725/90631395 更多资源下载:关注我 当下BAT、TMD等互联网一线企业已几乎不再招募传统测试工程师,而只招测试开发工程师!在软件测试技术栈迭代…

【Python数据库编程实战】从SQL到ORM的完整指南

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:SQLite基础操作案例2:MySQL连接池案例3:SQLAlchemy ORM …

第1讲|R语言绘图体系总览(Base、ggplot2、ComplexHeatmap等)

目录 第1讲|R语言绘图体系总览 ✨ 引言:为什么R绘图如此重要? 🧩 1. Base绘图系统 🧩 2. ggplot2生态系统 🧩 3. ComplexHeatmap超级热图系统 🧩 4. 其他特色绘图库(快速了解) ✏️ 小结一句话 📅 预告下一讲 第1讲|R语言绘图体系总览 (Base、ggplot…

银行卡归属地查询的快速入门:API接口性能与安全兼备的高效实现

在金融和支付领域,获取银行卡的归属信息是一个常见的需求。**万维易源提供的“银行卡归属信息查询”API为开发者和企业提供了高效、便捷的银行卡信息查询服务,可以通过简单的接口调用获取银行卡的归属地、银行名称、电话号码、网址、卡种、银联Luhn效验和…

如何把两个视频合并成一个视频?无需视频编辑器即可搞定视频合并

在日常生活中,我们经常需要将多个视频片段合并成一个完整的视频,例如制作旅行记录、剪辑教学视频或拼接短视频素材。简鹿视频格式转换器是一款功能强大的工具,不仅可以进行视频格式转换,还支持视频合并功能。以下是使用简鹿视频格…

Android-KeyStore安全的存储系统

​ 在 Android 中,AndroidKeyStore 是一个安全的存储系统,用于存储加密密钥。它提供了一种安全的方式来生成、存储和管理密钥,而无需将密钥暴露给应用程序本身。以下是如何使用 AndroidKeyStore 的基本步骤和示例代码。 检查 AndroidKeyStor…

YOLOv12 改进有效系列目录 - 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制 - 针对多尺度、小目标、遮挡、复杂环境、噪声等问题!

🔥 在 YOLO 系列一路狂飙之后,YOLOv12 带来了令人耳目一新的范式转变——它不再以 CNN 为绝对核心,而是首次 围绕注意力机制构建 YOLO 框架,在保证实时性的前提下,将检测精度再次推向新高度! 为了进一步探…