首页/新闻资讯/正文详情

RocketMQ知识点

发布时间:2026/9/24 17:26:42 来源:云帆数科 栏目:资讯中心
RocketMQ知识点
^^《榴芒客服系统》是我们工作室开发的在线客服系统欢迎下载试用《榴芒客服系统》https://blog.csdn.net/look4liming/article/details/164755808RocketMQ是队列式的消息中间件。由Producer、Consumer、Broker、NameServer组成。Productor创建消息Broker存储消息Consumer处理消息。Producer向队列发送消息队列的集合称为Topic。Consumer可以做广播消费或集群消费。做广播消费时一个Consumer消费Topic上的所有队列做集群消费时多个Consumer平均消费Topic上的所有队列保证消息的顺序性。消息消费支持拉取和推送两种模式。MQ推送消息给消费者实际上也是通过拉取的方式实现的。RocketMQ的各组件均可水平扩展。支持主从备份防止数据丢失主节点故障可自动分流到备用节点。支持分布式事务通过两段式提交和回查确保消息发送和数据库变更的最终一致性RabbitMQ和Kafka都不支持。Broker实际上就是一台服务器每个Broker上可以存储多个Topic的消息每个Topic的消息可以分布在多个Broker上。消息队列中存储的是消息的物理地址每个Topic的消息地址存储于多个消息队列上消息队列相当于Topic的分区。NameServer可集群部署NameServer之间不同步任何数据。要先启动NameServer再启动Broker。NameServer是服务注册中心用于管理Broker。Broker启动时把自己注册到NameServerProducer拿着Topic信息到NameServer查询然后和Broker建立连接。NameServer将数据存储在内存中关闭NameServer数据就丢失了。重启NameServer它通过Producer、Broker、Consumer的心跳将集群的元数据信息再重现出来。NameServer负责服务发现和路由寻址为客户端提供Broker列表、Topic和Broker的映射。客户端可以配置多个NameServer这样当某个NameServer不可用时可以切换到其他节点。NameServer不支持强一致性而是关注高可用性和高吞吐量并且可能存在短时的路由信息不一致。NameServer与Broker是保持长连接的每隔30秒检测Broker是否存活Broker不可用时NameServer会从路由注册表中剔除该Broker。Broker用于存储消息接收来自Producer的消息Consumer从这里取得消息。Broker也存储与消息有关的元数据用户组、偏移量、队列等。Broker有两种类型Master、Slave。Master既能写也读Slave是只读的。Master和Slave是一对多的Master和Slave具有相同的Broker name但是BrokerId不同BrokerId为0的是Master非0的是Slave。Broker有4种集群部署方式单Master、多Master、多Master多Slave异步复制、多Master多Slave同步双写。单Master一旦Broker宕机会导致整个服务不可用。多Master所有Broker都是Master没有Slave。单台机器宕机会导致该机器上的消息无法消费消息实时性会受影响。多Master多Slave异步复制每个Master对应一个Slave消息采用异步复制方式主备之间有毫秒级消息延迟。这种方式消息丢失少且消息实时性不会受影响Master 宕机后消费者可以继续从 Slave 消费过程对用户应用程序透明不需要人工干预性能同多 Master 方式几乎一样。缺点是 Master 宕机时在磁盘损坏情况下会丢失极少量消息。多Master多Slave同步双写每个Master对应一个Slave主备都写成功才返回成功。这种方式数据与服务都没有单点问题Master宕机时消息无延迟服务与数据的可用性非常高。相对异步复制方式发送消息的延迟会略高。Producer有三种类型NormalProducer标准生产者用于发送常规消息不保证消息的顺序性或事务性。OrderProducer顺序生产者保证同一主题内消息的顺序性。TransactionProducer事务生产者用于支持分布式事务确保消息发送与本地事务操作的原子性。在消息发送前执行预提交操作并在事务成功或回滚后确认或撤销消息。有3种消息发送方式同步发送、异步发送、单向发送。同步发送发送方发出数据后会在收到接收方发回响应之后才发下一个数据包。一般用于重要通知消息。用于链路耗时较长、对响应时间敏感的业务场景异步发送发出数据后不等接收方发回响应接着发送下个数据包。单向发送只负责发送消息、不等待服务器回应、没有回调用于耗时非常短但对可靠性要求不高的场景如日志收集。Producer Group通常发送一类消息并且发送逻辑一致所以将这些Producer分组在一起。生产者通过Producer Group的名字来标记自己是一个集群。Producer的使用流程启动流程1、初始化创建DefaultMQProducer实例设置生产者组名、NameServer地址等配置。2、连接NameServer生产者会连接到NameServer集群获取Topic的路由信息。3、发送消息生产者根据路由信息选择合适的Broker通过网络通信客户端如Netty发送消息到Broker。4、失败重试如果消息发送失败生产者会根据配置的重试策略进行自动重试。Producer是完全无状态的可集群部署。Producer每隔30秒从NameServer同步一次Topic信息如果有Broker不可用30秒后Producer就能知道但在此期间发往不可用的Broker的消息都会失败。Producer每隔30秒向Broker发送心跳Broker每隔10秒扫描存活的连接如果2分钟内没有收到心跳Broker会断开与Producer的连接。Consumer也称为消息订阅者负责从Broker接收消息、消费消息。Consumer有2种类型推模式消费者、拉模式消费者。推模式下消费者需要设置消息处理的回调函数当新消息到达时RocketMQ会调用这个回调函数来处理消息。Consumer Group将消费同一类消息、消费逻辑一样的Consumer组合成消费者组。同一条消息只能被某一Consumer Group的一个Consumer消费但是可以同时被不同Consumer Group消费。Consumer每隔30秒从NameServer获取Topic信息如果Broker不可用Consumer需要30秒才会知道。Consumer每隔30秒向Broker发送心跳Broker每隔10秒扫描一次连接2分钟内没有回应的连接会被关掉并通知Consumer Group中的所有ConsumerConsumer重新分配队列然后继续消费。如果Consumer发现Master宕机会自动转向Slave因为Slave和Master的数据同步有延迟所以可能会丢失一些消息。等Master恢复运行丢掉的消息最终会被消费。Producer发送消息的流程连接NameServer获取Topic的Broker列表通过负载均衡算法选取一个Broker发送消息Broker将消息存储到CommitLog根据消息的Topic和Queue更新ConsumeQueue如果是事务消息Producer需要完成事务的提交或回滚确保消息最终一致。NameServer与Broker保持长连接每隔30秒检测Broker是否存活超过120秒Broker还是不可达则从路由表中移除该Broker。在集群模式下一条消息只能被一个消费者消费在广播模式下消息会被订阅该Topic的所有消费者消费。消费者消费完一条消息后会向Broker发送ACKBriker根据ACK更新消息位点。消费失败消息通过配置的消费策略进行重试或者进入死信队列。消息Message必须与主题Topic对应。可以给消息设置标签Tag和键值对这个机制允许为消息设置业务key方便在Broker上查找该消息方便开发阶段定位问题。主题Topic是消息的第一级类型。标签Tag是消息的第二级类型消息可以没有Tag。例如Topic是人类则Tag可以是中国人、美国人、俄罗斯人等。主题下可以有多个消息队列Message QueueRocketMQ会轮询主题下的所有消息队列将消息发出去。两种消费模式集群模式Clustering广播模式Broadcasting。默认消费模式是集群模式该模式下一条消息只能被消费者组中某一消费者消费。广播模式下某一消息会被消费者组中的每个消费者消费。两种消息顺序顺序消费并行消费。顺序消费是指消息消费的顺序和消息产生的顺序一致。所以如果业务要求全局顺序消费则主题只能有一个消息队列。并行消费不保证消息顺序。RocketMQ基于主题的发布与订阅模式观察者模式。因为Topic的路由路由信息无需在集群内保持强一致最终一致所以NameServer间无需通信。消息存储在文件组上文件组内每个文件大小固定便于映射到内存。消息顺序写也提高了IO效率队列文件和索引文件方便消费和查找。RocketMQ中消息有可能会被重复消费所以开发者需要自己保证不重复消费消息如幂等消费。Broker Master和Broker Slave主从结构它们之间会执行数据同步。Producer与Broker Master建立长连接只能将消息发送给Broker Master。Consumer与Broker Master和Broker Slave都建立长连接既可以从Broker Master订阅消息也可以从Broker Slave订阅消息。RocketMQ中消息的顺序是分区Queue顺序不是全局顺序。如果主题中只有一个分区且消费者只有一个就能实现全局顺序。消费者可以通过规则只消费某一主题下自己感兴趣的消息这个机制称为消息过滤消息过滤分为服务端过滤和消费端过滤。所有消息主题存储在名为CommitLog的文件中该文件默认大小为1GB达到上限后会生成新文件。每个消息队列有自己的QueueConsume文件存储了CommitLog中消息的偏移量逻辑和物理、消息大小等信息。IndexFile文件支持消息按关键字查询。同步刷盘、异步刷盘。RocketMQ通过消费确认ACK保证消息至少被消费一次因为ACK丢失等异常情况的发生消息可能会被重复消费。对于已消费成功的消息如果需要重新消费可以使用消息回溯机制支持按时间回溯精确到毫秒可以向前或向后回溯。RocketMQ的消息存储文件默认保留3天3天后过期清理。RocketMQ支持消息延迟级别用于定时消费消息。RocketMQ支持消息重试机制。^^《榴芒客服系统》是我们工作室开发的在线客服系统欢迎下载试用《榴芒客服系统》https://blog.csdn.net/look4liming/article/details/164755808

相关推荐

RocketMQ重试设置
RocketMQ重试设置

^^ 《榴芒客服系统》是我们工作室开发的在线客服系统,欢迎下载试用: 《榴芒客服系统》https://blog.csdn.net/look4liming/article/details/164755808 客户端重试(生产者端) DefaultMQProducer producer new DefaultMQProducer(… · 2026/9/24 17:26:42

Doctrine ORM 关联映射(Association Mapping)完全指南:从外键到对象引用的双向转换实战
Doctrine ORM 关联映射(Association Mapping)完全指南:从外键到对象引用的双向转换实战

数据库ORM后端 【免费下载链接】orm Doctrine Object Relational Mapper (ORM) 项目地址: https://gitcode.com/gh_mirrors/or/orm 点击查看 免费下载 导读 本文是 Doctrine Object Relational Mapper (ORM) 官方参考文档中 association-mapping.rst 的深度展开版… · 2026/9/24 17:26:36

RocketMQ怎么保证消息不丢
RocketMQ怎么保证消息不丢

^^ 《榴芒客服系统》是我们工作室开发的在线客服系统,欢迎下载试用: 《榴芒客服系统》https://blog.csdn.net/look4liming/article/details/164755808 一、Producer端 1、消息发送确认机制: 同步发送会等待Broker确认消息发送成功&#xff… · 2026/9/24 17:26:36

元初混沌体系 第四卷 太赫兹高频通信与超宽带频谱体系:第七十七篇 轻量化地面太赫兹微基站硬件集成方案
元初混沌体系 第四卷 太赫兹高频通信与超宽带频谱体系:第七十七篇 轻量化地面太赫兹微基站硬件集成方案

第七十七篇 轻量化地面太赫兹微基站硬件集成方案本篇单元定位本篇隶属第四卷太赫兹高频通信与超宽带频谱体系 第五单元太赫兹硬件、射频、天线原生设计范式(73–90)第五篇地面终端集成落地总纲。前文七十三至七十六篇依次完成太赫兹芯片原生架构、介质低… · 2026/9/24 17:57:19

Python开发趋势,这5个方向最值得投入
Python开发趋势,这5个方向最值得投入

2026年6月,TIOBE编程语言排行榜上,Python以25.8%的市场份额继续稳居榜首,同比增长超过3个百分点,增速远超其他主流语言。更值得注意的是,这一增长主要来自AI和数据分析领域的新增用户,而非蚕食其他语言的市… · 2026/9/24 17:57:19

HiTraceChain:TraceId、Span 与跨线程调用链的上下文传播【鸿蒙心迹】
HiTraceChain:TraceId、Span 与跨线程调用链的上下文传播【鸿蒙心迹】

用户点了一次"提交订单",日志里却出现了几十条记录,怎么证明它们属于同一次操作?做线上问题排查的时候,最头疼的就是这个:用户说点了一次提交,然后报错了。你去翻日志,翻出来几十条记… · 2026/9/24 17:57:13

QUIC 长连接收到重复推送怎么办:连接世代、messageId 与幂等消费
QUIC 长连接收到重复推送怎么办:连接世代、messageId 与幂等消费

QUIC 长连接收到重复推送怎么办:连接世代、messageId 与幂等消费 手机从 Wi-Fi 切到蜂窝网络后,通知列表突然多出两条相同消息;日志里还能看到旧连接在新连接建立后晚到一步。QUIC 能减少握手和队头阻塞,但不会替应用决定“哪条连… · 2026/9/24 17:57:13

人脸框为什么总偏半张脸:PixelMap 旋转、缩放与坐标映射怎么对齐
人脸框为什么总偏半张脸:PixelMap 旋转、缩放与坐标映射怎么对齐

人脸框为什么总偏半张脸:PixelMap 旋转、缩放与坐标映射怎么对齐 Core Vision Kit 返回了准确的人脸矩形框,画到页面上却整体向右偏,横屏照片还会旋转九十度。检测结果通常位于输入图片坐标系;页面上的 Image 经过方向修正、等比缩… · 2026/9/24 17:57:13

基于 Vue3 + Spring Boot 的【企业私有化 RAG 知识库与长文档智能问答系统】设计与实现(含PRD/三端高保真源码/大屏)
基于 Vue3 + Spring Boot 的【企业私有化 RAG 知识库与长文档智能问答系统】设计与实现(含PRD/三端高保真源码/大屏)

基于 Vue3 Spring Boot 的【企业私有化 RAG 知识库与长文档智能问答系统】设计与实现(含PRD/三端高保真源码/大屏) 作者简介:全栈高级架构师,专注企业级数字化落地、AI 智能体编排与大模型前沿应用架构。 项目定位:企… · 2026/9/24 17:57:13

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码