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 读真实消息内容。
相关推荐
晓晓_za8986681 小时前
Geo 优化源码二次开发:自定义地域规则改造实操文档
java·开发语言·搜索引擎·ci/cd·矩阵
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 8 章 AOP 的进阶机制和应用 阅读笔记 16
java·spring boot·笔记
AI人工智能+电脑小能手1 小时前
大白话说Java设计模式-38-迭代器模式(业务实战篇)
java·设计模式·迭代器模式·stream·遍历封装·集合通用·分页遍历
QQ_21696290961 小时前
【源码编号:project86570】SpringBoot电影院在线选座售票系统:电影排片、在线选座、订单购票、后台管理完整实战
java·spring boot·后端
谢亮_vipxieliang2 小时前
手机号验证技术方案:号段规则与正则表达式
java·服务器·spring boot·正则表达式·hibernate
wang09072 小时前
自己动手写一个tomcat之7监听器和过滤器
java·tomcat
梅孔立2 小时前
Pi-Agent 终极极简配置文档(Java+Vue+Python爬虫 4-5千文件项目)
java·vue.js·python
Query*2 小时前
Agent 开发之项目 AI Native 化:通过大模型与 RAG 赋予产品智能能力
java·人工智能·ai
孫治AllenSun2 小时前
【LangChain4J-03】Springboot 项目搭建框架
java·spring boot·后端