当前位置: 首页 > news >正文

深入解析 Apache RocketMQ架构组成与核心组件作用

一、RocketMQ 核心架构图

架构特点

        完全无单点:NameServer 集群无状态,Broker 主从高可用。

        水平扩展:Broker 可无限横向扩展,Topic 可跨多个 Broker。

        Pull 模型:Consumer 主动拉取,可控消费速度,避免压垮消费者。

二、四大核心组件详解


1. Producer(生产者)—— 消息的“发件人”

职责

  • 创建并发送消息到指定 Topic。
  • 支持同步、异步、单向发送模式。
  • 自动从 NameServer 获取 Topic 路由信息(Broker 地址列表)。
  • 支持消息重试、事务消息、顺序消息、延迟消息。

关键概念

  Producer Group生产者组,用于标识一类 Producer(事务消息回查用)。

  Tag消息标签,用于 Consumer 端过滤(如 TagA || TagB)。

  Key消息业务唯一键,用于精确查询和去重。

DefaultMQProducer producer = new DefaultMQProducer("ProducerGroup1");
producer.setNamesrvAddr("localhost:9876");
producer.start();Message msg = new Message("OrderTopic", "CreateOrder", "orderId_123", "Hello RocketMQ".getBytes());
SendResult result = producer.send(msg); // 同步发送
System.out.println("Send Status: " + result.getSendStatus());

2. Consumer(消费者)—— 消息的“收件人”

职责

  • 从 Broker 拉取消息并处理。
  • 支持集群消费(Clustering)和广播消费(Broadcasting)。
  • 自动从 NameServer 获取路由,负载均衡分配 Queue。
  • 支持消费重试、死信队列、消费位点(Offset)持久化。

关键概念

  Consumer Group消费者组,同一组内负载均衡消费(每条消息只被组内一个 Consumer 消费)。

  MessageListener消息监听器,实现 consumeMessage() 方法处理业务逻辑。

  Offset消费位点,记录 Consumer 已消费到的位置(存储在 Broker 或本地)。

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ConsumerGroup1");
consumer.setNamesrvAddr("localhost:9876");
consumer.subscribe("OrderTopic", "*"); // 订阅所有 Tagconsumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {for (MessageExt msg : msgs) {System.out.println("Received: " + new String(msg.getBody()));// 处理业务逻辑}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; // 消费成功
});consumer.start();

3. Broker(消息服务器)—— 消息的“邮局 + 仓库”

职责

  • 接收 Producer 发送的消息,存储到 CommitLog(顺序写磁盘)。
  • 响应 Consumer 的拉取请求,从 ConsumeQueue + IndexFile 快速检索。
  • 管理 Topic、Queue、Consumer Offset、权限控制等。
  • 主从同步:Master Broker 接收读写,Slave Broker 只读 + 同步数据(高可用)。

核心存储结构

  CommitLog所有 Topic 消息混合顺序写入(高性能关键)。

  ConsumeQueue每个 Queue 一个文件,存储消息在 CommitLog 的 offset、size、tag hash(供 Consumer 快速定位)。

  IndexFile基于 Key 的哈希索引,支持按 Key 查询消息。

高可用模式

        异步复制:Master 写成功即返回,异步同步给 Slave(高性能,可能丢少量数据)。

        同步双写:Master + Slave 都写成功才返回(强一致,性能略低)。


4. NameServer(路由注册中心)—— 消息的“DNS 服务器”

职责

  • 无状态、轻量级:多个 NameServer 之间无通信,数据最终一致。
  • 路由管理:Broker 启动时向所有 NameServer 注册 Topic 路由信息(含 Master/Slave 地址)。
  • 路由发现:Producer/Consumer 定时(默认 30s)从 NameServer 拉取最新路由表。
  • 心跳检测:NameServer 每 10s 检测 Broker 心跳,超时(120s)则剔除路由。

为什么不用 ZooKeeper?

        RocketMQ 追求极致性能与简单性,NameServer 无选举、无 Watch,比 ZK 更轻量、更稳定。

部署建议

        至少部署 2 个 NameServer,Producer/Consumer 配置多个地址(逗号分隔)。

        NameServer 不存储消息,宕机不影响已建立连接的读写(路由缓存有效期内)。

三、核心概念:Topic、Queue、Group、Tag

概念说明类比
Topic消息主题,一类消息的逻辑分类(如 OrderTopicLogTopic邮箱的“收件箱分类”
QueueTopic 的分区,一个 Topic 可分多个 Queue,分布在不同 Broker 上(并行消费)邮箱的“分拣格子”
Producer Group一类 Producer 的标识,用于事务消息回查发件人“部门”
Consumer Group一类 Consumer 的标识,组内负载均衡消费收件人“工作组”
Tag消息标签,用于 Consumer 端二次过滤(如 TagATagB邮件“标签/优先级”
Key消息业务唯一键,用于查询、去重(如订单ID)邮件“追踪号”

最佳实践

  1. Topic 按业务域划分(如 OrderPaymentUser)。
  2. Queue 数量 = 消费并发度上限(建议 8~32 个,根据业务调整)。
  3. 同一业务用同一个 Consumer Group,避免重复消费。

四、消息全流程:从发送到消费

关键点

  • Producer/Consumer 与 NameServer 是“查询关系”,非强依赖。
  • Broker 是消息存储与转发的核心,需保证高可用。
  • Consumer 主动 Pull,可控制消费速度(背压机制)。

五、高级特性与生产实践

1. 顺序消息(Orderly Message)

保证同一业务 ID(如订单ID)的消息按发送顺序消费。

        实现:Producer 按 shardingKey 选择固定 Queue,Consumer 单线程消费该 Queue。

        场景:订单创建 → 付款 → 发货 → 完成。

2. 事务消息(Transactional Message)

实现“本地事务 + 消息发送”的最终一致性。

        流程:发送 Half 消息 → 执行本地事务 → Commit/Rollback → Broker 回查(若超时)。

        场景:扣库存 + 发订单消息。

3. 延迟消息(Delay Message)

消息发送后,延迟指定时间才对 Consumer 可见。

        级别:支持 18 个固定延迟级别(1s ~ 2h)。

        场景:订单超时未支付自动取消。

4. 死信队列(DLQ - Dead Letter Queue)

消费失败超过最大重试次数(默认 16 次)的消息,进入死信队列。

        Topic%DLQ% + ConsumerGroupName

        处理:人工干预或定时任务补偿。


文章转载自:

http://Ug40VYon.dhchL.cn
http://JgZnJm2B.dhchL.cn
http://FTI89ZpG.dhchL.cn
http://rUULPGpr.dhchL.cn
http://FJH0yeGu.dhchL.cn
http://1SJxKEC9.dhchL.cn
http://GaVo9MPM.dhchL.cn
http://qPjtotWA.dhchL.cn
http://O4ZPFhup.dhchL.cn
http://ZHZJpUTX.dhchL.cn
http://PqsTsvHI.dhchL.cn
http://Xq8DkK73.dhchL.cn
http://3WUDYawn.dhchL.cn
http://EgeU28mF.dhchL.cn
http://OeyxbLm6.dhchL.cn
http://y4qdZUT4.dhchL.cn
http://IDhIwaz2.dhchL.cn
http://ir2pppM3.dhchL.cn
http://RaLcoHNX.dhchL.cn
http://pwBBNY7c.dhchL.cn
http://TnQeHH3b.dhchL.cn
http://3nhEBMj2.dhchL.cn
http://wshQgfTh.dhchL.cn
http://ni9sF6zG.dhchL.cn
http://dHGXxt3Y.dhchL.cn
http://VFXlUSWz.dhchL.cn
http://SYOq89s4.dhchL.cn
http://UnCafpyL.dhchL.cn
http://8KJRmWZW.dhchL.cn
http://99xz2kfn.dhchL.cn
http://www.dtcms.com/a/384977.html

相关文章:

  • Tomcat下载和安装教程(图文并茂,适合新手)
  • (用Maven)整合SpringBoot,SpringMVC,MyBatis
  • 数据结构---基于链式存储结构实现的双端队列
  • 【完整源码+数据集+部署教程】训练自动化:电杆基坑分割系统 yolov8-seg-C2f-CloAtt
  • 某发电替代扩建项目集控楼高大支模自动化监测
  • 什么是产品思维?产品经理如何提高产品思维?
  • Quat.js四元数完全指南
  • 34.Socket编程(UDP)(上)
  • 综合篇| 智能体平台dify、coze和n8n对比
  • Crond服务
  • LazyVim设置tab
  • 【无标题】好吧
  • 【Git】零基础入门:配置与初始操作实战指南
  • 云手机兼容性对游戏的重要性
  • Vue-color:Vue.js 专业颜色选择器组件库 – 支持Vue2/3,TypeScript,暗色主题
  • IntelliJ IDEA 的 Git 功能
  • 【更新至2024年】2009-2024年上市公司排污环保费用数据
  • Nmap图形化扫描工具 | 集成资产定期监控功能
  • 讲一讲cot蒸馏以及grpo的方式训练模型
  • 面试之Java基础
  • LeetCode 3325.字符至少出现K次的子字符串 I
  • 【Linux命令从入门到精通系列指南】cp 命令详解
  • Oracle重做日志(Redo Log):数据一致性的“守护者“
  • Linux的生产者消费者模型
  • 深度学习基础、pytorch使用①
  • 国产化PDF处理控件Spire.PDF教程:在 ASP.NET Core 中创建 PDF的分步指南
  • 某村通信网络改造:从痛点到解决方案的全景分析
  • Elastic APM 入门指南:快速设置应用性能监控
  • 流式响应的demo , 前端markdown格式显示, 打字机效果展示
  • 【免费体验】旗讯 OCR手写识别:破解工厂数据处理痛点,实现从 “人工录入” 到 “AI读单” 的升级