Skip to content

Meta Service 架构

技术栈

gRPC + Multi Raft(openraft)+ RocksDB

  • 节点间及对外均通过 gRPC 通信
  • 基于 openraft 实现 Multi Raft,多节点数据一致性
  • RocksDB 持久化所有数据,包括 Raft 日志和快照

职责

职责说明
集群协调节点发现、上下线管理、节点间数据分发
元数据存储Broker 节点信息、Topic 配置、Schema、Connector 配置、Storage Engine 分片元数据
KV 业务数据MQTT Session、保留消息、遗嘱消息、订阅关系、ACL、黑名单等运行时数据
消费位点消费组 Offset 提交与管理
控制器Session 过期清理、Last Will 延迟发送、Storage Engine GC、Connector 任务调度

Multi Raft 架构

Meta Service 运行三个独立的 Raft Group,每个 Group 有独立的 Leader 和存储,并行工作互不阻塞:

Raft Group存储内容
metadata集群节点信息、KV 通用存储、Schema、资源配置、Storage Engine Shard / Segment 元数据
offset消费组 Offset 提交与管理
mqtt用户、Topic、Session、保留消息、遗嘱消息、订阅关系、ACL、黑名单、Connector、共享订阅组 Leader

Meta Service Multi Raft 架构

Raft 参数:

参数
heartbeat_interval250ms
election_timeout_min299ms
write_timeout30s(可配置)
慢写告警阈值1000ms

写入路径

写入超过 write_timeout(默认 30s)返回错误;超过 1000ms 记录 warn 日志。

Meta Service 写入路径


数据存储

  • Raft 日志:存储在 RocksDB,节点重启后完整恢复
  • Raft 快照:定期生成,压缩日志,加快节点恢复
  • 业务数据:通过 DataRoute 写入对应的 RocksDB Column Family
  • 内存缓存:CacheManager 维护热数据缓存,降低 RocksDB 读压力;冷数据直接读写 RocksDB

控制器(BrokerController)

Leader 节点启动后运行 BrokerController,负责后台调度:

后台任务说明
Session 过期清理定期扫描过期 Session,清理相关数据
Last Will 延迟发送检测到期遗嘱消息,触发发送到 Broker
Storage Engine GC清理已删除 Shard / Segment 的残留数据
Connector 调度Connector 任务的创建、分配和状态跟踪

启动流程

  1. 读取配置中的 meta_addrs,获取所有 Meta Node 地址
  2. 初始化 MultiRaftManager,依次创建 metadata、offset、mqtt 三个 Raft Group
  3. 通过 gRPC 与所有节点建立连接,完成集群初始化和 Leader 选举
  4. Leader 节点启动 BrokerController
  5. Meta Service 就绪,对 Broker 和 Storage Engine 提供 gRPC 服务

与 ZooKeeper / etcd 对比

维度ZooKeeperetcdMeta Service
一致性协议ZAB(单 Leader)单 RaftMulti Raft
存储全内存BoltDBRocksDB
扩展性受内存限制受单 Raft 限制各 Raft Group 独立扩展
功能范围元数据协调元数据协调元数据 + KV 存储 + 控制器
外部依赖否(内置)
🎉 既然都登录了 GitHub,不如顺手给我们点个 Star 吧!⭐ 你的支持是我们最大的动力 🚀