RocketMQ中的broker

Broker 是 RocketMQ 最核心服务节点,承担消息存储、接收发送、投递消息、元数据管理、HA 主从、定时延时、事务消息等能力,底层基于 Netty Remoting 对外提供服务。

1、消息接收与存储

  1. 接收生产者发送消息,做校验、解析。
  2. 写入 CommitLog,支持同步刷盘 / 异步刷盘。
  3. 异步构建 ConsumeQueue(消费队列索引)、IndexFile(消息 key 索引,根据 key 查询消息)。
  4. 支持普通消息、延时消息、事务消息、批量消息。

2、消息投递,处理消费者请求

  1. 处理消费者 PULL 拉消息请求(PushConsumer 底层也是 pull)。
  2. 根据 ConsumeQueue 索引,查找消息数据返回给客户端。
  3. 维护消费偏移量 offset:
    • offset 可以存储在 Broker(默认);也可以存储在客户端本地。
  4. 处理消费结果:处理重试消息,把失败消息写入重试队列 % RETRY% 消费组名 ;重试耗尽转入死信队列%DLQ%消费组名。

3、元数据管理功能

  1. Topic 管理:创建、更新 Topic,维护 Topic 与 MessageQueue 映射。
  2. 向所有 NameServer定时上报心跳与 Topic 路由元数据(30s 一次)。
  3. 维护消费组信息:接收消费者心跳,保存当前消费组在线消费者列表,返回给消费者用于客户端 Rebalance 重平衡。

4、主从高可用 HA 能力

  1. Master 接收写请求;Slave 不接收写(默认),只负责读。
  2. HA 模块:主从复制。支持异步复制、同步复制(同步双写)。
  3. Slave 通过HAClient主动 pull 拉取 Master 的 CommitLog 数据做同步。
  4. 5.x DLedger‑Broker 支持自动选主、主节点故障自动切换。

5、特殊消息处理

① 延时消息

内部维护 SCHEDULE_TOPIC_XXXX 系统延时 topic;后台定时任务扫描到期消息,重新投递到业务 Topic。

② 事务消息

  1. 处理半消息(Prepared 消息);半消息存储在 CommitLog。
  2. 事务回查:定时向生产者发送 check 回调,查询本地事务状态(Commit / Rollback)。
  3. 根据生产者回执,把半消息提交或者回滚。

③ 顺序消费队列锁

为顺序消费MessageListenerOrderly提供MessageQueue 分布式锁;锁续约、锁超时释放,防止重平衡期间多实例并发消费同一个队列。

6、存储文件管理

  1. CommitLog 文件滚动(默认 1G);ConsumeQueue、IndexFile 文件管理。
  2. 消息文件过期清理:按照配置的保留时间,删除过期 CommitLog 物理文件。
  3. PageCache 友好,支持预分配文件。

所有 Topic 的消息全部顺序写入同一个 CommitLog 逻辑文件 ,不是每个 Topic 单独建日志文件;再配合 ConsumeQueue 做索引。

CommitLog 不是单个物理文件,是一组固定大小(默认 1G )的物理文件,滚动生成,逻辑上看成一个巨大文件。

核心目的是充分利用磁盘顺序写性能高的特点

结构举例:

java 复制代码
CommitLog(真实消息体,全部消息顺序追加)
msgA(topic‑order) offset=0
msgB(topic‑pay)  offset=200
msgC(topic‑order) offset=450

ConsumeQueue // topic‑order‑0索引文件,只存偏移索引
0: offset=0 len=200
1: offset=450 len=xxx

ConsumeQueue // topic‑pay‑0索引文件
0: offset=200 len=xxx
  • 写消息:只追加写 CommitLog;异步构建各个 ConsumeQueue 索引。
  • 消费消息:读 ConsumeQueue 拿到 CommitLog 物理 offset,再根据 offset 去 CommitLog 读真实消息内容。
相关推荐
panxianren1 小时前
Bun 1.4 的 bun test --parallel 将 4 秒的测试套件缩短到约 1 秒
java·javascript
sunshine22 girl3 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
省钱兄--zs3 小时前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
youdexiang3 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
sunshine22 girl4 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat4 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
泡茶喝茶写代码6 小时前
A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口·股票数据api数据
\光辉岁月/7 小时前
7.javase-面向对象
java·开发语言
weixin_531094697 小时前
heap_4内存管理
java·开发语言·算法
程序员南飞7 小时前
win系统安装minio
java·数据结构·算法