RocketMQ教程-(4)-主题(Topic)

news2025/1/14 2:39:52

本文介绍 Apache RocketMQ 中主题(Topic)的定义、模型关系、内部属性、行为约束、版本兼容性及使用建议。

定义​

主题是 Apache RocketMQ 中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。 主题的作用主要如下:

  • 定义数据的分类隔离: 在 Apache RocketMQ 的方案设计中,建议将不同业务类型的数据拆分到不同的主题中管理,通过主题实现存储的隔离性和订阅隔离性。

  • 定义数据的身份和权限: Apache RocketMQ 的消息本身是匿名无身份的,同一分类的消息使用相同的主题来做身份识别和权限管理。

模型关系​

在整个 Apache RocketMQ 的领域模型中,主题所处的流程和位置如下:

主题

主题是 Apache RocketMQ 的顶层存储,所有消息资源的定义都在主题内部完成,但主题是一个逻辑概念,并不是实际的消息容器。

主题内部由多个队列组成,消息的存储和水平扩展能力最终是由队列实现的;并且针对主题的所有约束和属性设置,最终也是通过主题内部的队列来实现。

内部属性​

主题名称

  • 定义:主题的名称,用于标识主题,主题名称集群内全局唯一。

  • 取值:由用户创建主题时定义。

  • 约束:请参见参数限制。

队列列表

  • 定义:队列作为主题的组成单元,是消息存储的实际容器,一个主题内包含一个或多个队列,消息实际存储在主题的各队列内。更多信息,请参见队列(MessageQueue)。

  • 取值:系统根据队列数量给主题分配队列,队列数量创建主题时定义。

  • 约束:一个主题内至少包含一个队列。

消息类型

  • 定义:主题所支持的消息类型。

  • 取值:创建主题时选择消息类型。Apache RocketMQ 支持的主题类型如下:

    • Normal:普通消息,消息本身无特殊语义,消息之间也没有任何关联。

    • FIFO:顺序消息,Apache RocketMQ 通过消息分组MessageGroup标记一组特定消息的先后顺序,可以保证消息的投递顺序严格按照消息发送时的顺序。

    • Delay:定时/延时消息,通过指定延时时间控制消息生产后不要立即投递,而是在延时间隔后才对消费者可见。

    • Transaction:事务消息,Apache RocketMQ 支持分布式事务消息,支持应用数据库更新和消息调用的事务一致性保障。

  • 约束:Apache RocketMQ 从5.0版本开始,支持强制校验消息类型,即每个主题只允许发送一种消息类型的消息,这样可以更好的运维和管理生产系统,避免混乱。为保证向下兼容4.x版本行为,强制校验功能默认关闭,推荐通过服务端参数 enableTopicMessageTypeCheck 开启校验。

行为约束​

消息类型强制校验

Apache RocketMQ 5.x版本支持将消息类型拆分到主题中进行独立运维和处理,因此系统会对发送的消息类型和主题定的消息类型进行强制校验,若校验不通过,则消息发送请求会被拒绝,并返回类型不匹配异常。校验原则如下:

  • 消息类型必须一致发送的消息的类型,必须和目标主题定义的消息类型一致。

  • 主题类型必须单一每个主题只支持一种消息类型,不允许将多种类型的消息发送到同一个主题中。

常见错误使用场景

  • 发送的消息类型不匹配例如,创建主题时消息类型定义为顺序消息,发送消息时发送事务消息到该主题中,此时消息发送请求会被拒绝,并返回类型不匹配异常。

  • 单一消息主题混用例如,创建主题时消息类型定义为普通消息,发送消息时同时发送普通消息和顺序消息到该主题中,则顺序消息的发送请求会被拒绝,并返回类型不匹配异常。

使用示例​

Apache RocketMQ 5.0版本下创建主题操作,推荐使用mqadmin工具,需要注意的是,对于消息类型需要通过属性参数添加。示例如下:

sh mqadmin updateTopic -n <nameserver_address> -t <topic_name> -c <cluster_name> -a +message.type=<message_type>

其中message_type根据消息类型设置成Normal/FIFO/Delay/Transaction。如果不设置,默认为Normal类型。

其中message_type根据消息类型设置成Normal/FIFO/Delay/Transaction。如果不设置,默认为Normal类型。

使用建议​

按照业务分类合理拆分主题

Apache RocketMQ 的主题拆分设计应遵循大类统一原则,即将相同业务域内同一功能属性的消息划分为同一主题。拆分主题时,您可以从以下角度考虑拆分粒度:

  • 消息类型是否一致:不同类型的消息,如顺序消息和普通消息需要使用不同的主题。

  • 消息业务是否关联:如果业务没有直接关联,比如,淘宝交易消息和盒马物流消息没有业务交集,需要使用不同的消息主题;同样是淘宝交易消息,女装类订单和男装类订单可以使用同一个订单。当然,如果业务量较大或其他子模块应用处理业务时需要进一步拆分订单类型,您也可以将男装订单和女装订单的消息拆分到两个主题中。

  • 消息量级是否一样:数量级不同或时效性不同的业务消息建议使用不同的主题,例如某些业务消息量很小但是时效性要求很强,如果跟某些万亿级消息量的业务使用同一个主题,会增加消息的等待时长。

正确拆分示例: 线上商品购买场景下,订单交易如订单创建、支付、取消等流程消息使用一个主题,物流相关消息使用一个主题,积分管理相关消息使用一个主题。

错误拆分示例:

  • 拆分粒度过粗:会导致业务隔离性差,不利于独立运维和故障处理。例如,所有交易消息和物流消息都共用一个主题。

  • 拆分粒度过细:会消耗大量主题资源,造成系统负载过重。例如,按照用户ID区分,每个用户ID使用一个主题。

单一主题只收发一种类型消息,避免混用

Apache RocketMQ 主题的设计原则为通过主题隔离业务,不同业务逻辑的消息建议使用不同的主题。同一业务逻辑消息的类型都相同,因此,对于指定主题,应该只收发同一种类型的消息。

主题管理尽量避免自动化机制

在 Apache RocketMQ 架构中,主题属于顶层资源和容器,拥有独立的权限管理、可观测性指标采集和监控等能力,创建和管理主题会占用一定的系统资源。因此,生产环境需要严格管理主题资源,请勿随意进行增、删、改、查操作。

Apache RocketMQ 虽然提供了自动创建主题的功能,但是建议仅在测试环境使用,生产环境请勿打开,避免产生大量垃圾主题,无法管理和回收并浪费系统资源。

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

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

相关文章

断路器分、合闸线圈直流电阻试验和绝缘电阻试验

断路器分、合闸线圈直流电阻试验 试验目的 对于断路器来说, 分、 合闸线圈是用于控制断路器分合闸状态的重要控制元件。 断路器停电检修时, 可以通过测试分、 合闸线圈的直流电阻来判断其是否正常。 试验设备 万用表 厂家&#xff1a; 湖北众拓高试代销 试验接线 分、 合闸线圈…

Linux系统进程概念详解

这里写目录标题 冯诺依曼体系结构操作系统(Operator System)1.概念2.目的3.管理4.系统调用和库函数概念 进程1.概念2.描述进程-PCB3.查看进程4.通过系统调用获取进程标示符5.通过系统调用创建进程-fork 进程状态1.Linux内核源代码2.进程状态查看 进程优先级1.基本概念2.查看系统…

dxf怎么转换成PDF格式?转换方法其实很简单

PDF文件是一种可靠的文件格式&#xff0c;可以在各种操作系统和软件上打开和查看。而dxf是CAD文件的一种格式&#xff0c;打开它一般都是需要相关的操作软件才能打开&#xff0c;不是特别方便&#xff0c;将dxf文件转换成PDF格式就可以很好的解决这一问题&#xff0c;下面教大家…

python:基于反卷积算法的 GEDI 波形树高特征提取

作者:CSDN @ _养乐多_ 本文将介绍如何对 GEDI(Global Ecosystem Dynamics Investigation)激光雷达数据中所标识激光测高数据点的波形数据使用反卷积算法提取树高特征。 文章目录 一、波形数据提取二、代码详细解释三、完整代码一、波形数据提取 波形数据提取参考博客:《p…

Nodejs+vue+elementui手机电脑产品维修售后服务管理系统

需求分析&#xff0c;也称为软件需求分析、系统需求分析或需求分析工程&#xff0c;是指开发人员经过充分的研究和分析&#xff0c;准确地理解用户和项目在功能、性能、可靠性等方面的具体需求&#xff0c;并将用户的非正式需求表述转化为确定系统必须执行的需求的完整定义的过…

pytorch实现图像remap

def gpu_remap(numpy_img,map_tensor):# 准备图像数据img_tensor torch.from_numpy(numpy_img).contiguous().cuda(non_blockingTrue)img_tensor img_tensor.permute(2,0,1).unsqueeze(0).float()res torch.nn.functional.grid_sample(img_tensor,map_tensor,modebilinear,p…

c语言练手项目【编写天天酷跑游戏2.0】EASYX图形库的运用。代码开源,素材已打包

天天酷跑项目的开发 项目前言 项目是基于Windows&#xff0c;easyX图形库进行开发的&#xff0c; 开发环境&#xff1a;Visual Studio 2022 项目技术最低要求&#xff1a; 常量&#xff0c;变量&#xff0c;数组&#xff0c;循环&#xff0c;函数。 文章目录 天天酷跑项目的…

单体架构与微服务架构

什么是单体架构 单体架构&#xff08;Monolithic Architecture&#xff09;是一种传统的软件架构模式&#xff0c;它将整个应用程序作为一个单一、自治的单元构建和部署。在这种架构中&#xff0c;应用程序的所有功能和组件都被集成到一个统一的代码库中。 在单体架构中&…

【Linux网络】网络编程套接字(一)基础部分

目录 理解源IP地址和目的IP地址理解源MAC地址和目的MAC地址数据在网络传输过程中有两套地址socket通信的本质端口号和目的端口号 Post(端口号) 和 Pid &#xff08;进程ID&#xff09;认识TCP协议和UDP协议 网络字节序 理解源IP地址和目的IP地址 因特网上每台计算机都有自己的…

Jmeter-使用http proxy代理录制脚本

Jmeter-使用http proxy代理录制脚本 第1步&#xff1a;打卡jmeter工具新增1个线程组 第2步&#xff1a;给线程组添加1个HTTP请求默认值 第3步&#xff1a;设置下HTTP请求默认值第4步&#xff1a;在工作台中新增1个----HTTP代理服务器 第5步&#xff1a;设置HTTP代理服务器…

C# List 详解二

目录 5.Clear() 6.Contains(T) 7.ConvertAll(Converter) ,toutput> 8.CopyTo(Int32, T[], Int32, Int32) 9.CopyTo(T[]) 10.CopyTo(T[], Int32) C# List 详解一 1.Add(T)&#xff0c;2.AddRange(IEnumerable)&#xff0c;3.AsReadOnly()&…

区间预测 | MATLAB实现QRFR随机森林分位数回归多输入单输出区间预测

区间预测 | MATLAB实现QRFR随机森林分位数回归多输入单输出区间预测 目录 区间预测 | MATLAB实现QRFR随机森林分位数回归多输入单输出区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRFR随机森林分位数回归多输入单输出区间预测 Matlab实现基…

JVM运行时数据区——方法区的内部结构

方法区用于存储加载的字节码文件的信息&#xff0c;运行时常量池&#xff0c;运行时常量池我们可以把它看作是一张映射表&#xff0c;其中保存了类中的常量&#xff0c;变量&#xff0c;方法的引用。

CSS 瀑布流效果效果

示例 <!DOCTYPE html> <html lang="cn"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>瀑布流效果</title><style>…

【iOS】weak关键字的实现原理

前言 关于什么是weak关键字可以去看看我以前的一篇博客&#xff1a;【OC】 属性关键字 weak原理 1. SideTable SideTable 这个结构体&#xff0c;前辈给它总结了一个很形象的名字叫引用计数和弱引用依赖表&#xff0c;因为它主要用于管理对象的引用计数和 weak 表。在 NSOb…

【Spring Boot自动装配原理详解与常见面试题】—— 每天一点小知识

&#x1f4a7; S p r i n g B o o t 自动装配原理详解与常见面试题 \color{#FF1493}{Spring Boot自动装配原理详解与常见面试题} SpringBoot自动装配原理详解与常见面试题&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页—…

引领AI数据标注行业,景联文科技提供高质量图像和文本标注服务

近年来&#xff0c;我国的数据要素市场呈现出高速增长的趋势&#xff0c;根据国家工信安全中心的统计数据&#xff0c;截至2022年&#xff0c;我国数据要素市场规模已达到815亿元&#xff0c;同比增长49.51%。 数据要素作为数字经济时代的关键要素&#xff0c;是构建新发展格局…

蓝桥杯专题-真题版含答案-【垒骰子_动态规划】【抽签】【平方怪圈】【凑算式】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

【天气雷达】双偏振产品-差分相位ΦDP详解

一、定义 差分相移(Total differential phase,ΦDP) 多普勒天气雷达可以获得目标相对雷达运动产生的相位差。同样运动状态的降水区对于水平偏振波和垂直偏振波引起的相位变化是不同的。这个两者之间的差值与降水区的特性有关,由于这个两者之间差值是雷达电磁波往返于雷达…

Redis【实践篇】之RedisTemplate基本操作

Redis 从入门到精通【应用篇】之RedisTemplate详解 文章目录 Redis 从入门到精通【应用篇】之RedisTemplate详解0. 前言1. RedisTemplate 方法1. 设置RedisTemplate的序列化方式2. RedisTemplate的基本操作 2. 源码浅析2.1. 构造方法2.2. 序列化方式2.3. RedisTemplate的操作方…