Skip to content

架构与存储模型

核心组件

组件作用
NameServer提供轻量路由注册与发现,各节点相互独立
Broker接收、存储和投递消息,维护消费进度等数据
Producer从 NameServer 获取路由并向 Broker 发送消息
Consumer按 Consumer Group 订阅并消费消息
Proxy5.x 客户端接入层,提供 gRPC 等协议入口
Controller在支持的高可用模式下管理 Broker 副本选主

NameServer 不是 ZooKeeper 式强一致协调服务。它保存路由视图,客户端会缓存并定期刷新;路由传播存在短暂延迟。

Topic 与 MessageQueue

Topic 是消息逻辑分类,MessageQueue 是 Topic 的并行存储和消费单元。顺序、负载均衡和消费并发都以 MessageQueue 为重要边界。

同一 Consumer Group 内,一条 MessageQueue 通常分配给一个 Consumer 实例;实例数超过可分配队列数时会有实例空闲。

存储结构

RocketMQ 的消息主体顺序写入 CommitLog,再通过异步构建的 ConsumeQueue 提供按 Topic/MessageQueue 消费的逻辑索引,IndexFile 支持按 Key 等条件查询。

  • CommitLog 是统一物理日志;
  • ConsumeQueue 保存逻辑位置、大小和 Tag Hash 等信息,不保存完整消息体;
  • Index 查询用于运维和有限检索,不应当作通用数据库索引。

发送方式

方式语义
同步发送等待 Broker 返回发送结果,适合关注结果的业务消息
异步发送通过 Callback 获取结果,提高并发吞吐
One-Way不等待 Broker 结果,可靠性最低

发送成功表示 Broker 接管到相应持久化边界,不表示 Consumer 已经完成业务处理。

消费模式

  • Clustering:同组 Consumer 分担消息,每条消息由组内一个实例处理;
  • Broadcasting:每个 Consumer 实例都处理消息,但消费进度和故障恢复语义与集群模式不同。

业务广播通常还要考虑实例扩缩容后是否需要补历史,不能只看“每个实例收到一份”。

Tag 与属性过滤

Tag 是轻量分类,SQL 属性过滤可按消息属性表达更复杂条件。过滤条件应与 Topic 边界合理配合,避免把完全不同的业务生命周期塞入一个 Topic。

参考资料