[ RocketMQ源码阅读 4 ] ControllerManager

该组件的核心就是一个Raft协议的实现。这个Raft协议的实现用的也不是淘宝系的JRaft,而是第三方的产品DLedger。对于生产要求比较严格的大厂,这个倒是比较意外。

用这个组件一般就是用来实现选主,或者当一个存储数据库来使用。前几篇有说过RocketMQ使用ControllerManager组件来实现的灾备切换,那么我们来看一下究竟是如何实现的。

对外接口

ControllerRequestProcessor

名称 描述 Raft操作类型
CONTROLLER_ALTER_SYNC_STATE_SET 往Raft日志同步syncStateSet
CONTROLLER_ELECT_MASTER 进行leader选举,将最终选出的Leader同步到Raft日志。让人震惊的是选主没有使用到Raft,而是自己实现的策略。
CONTROLLER_GET_REPLICA_INFO 按照brokerName获取所有broker信息
CONTROLLER_GET_METADATA_INFO 获取当前Raft集群所有Peer信息
BROKER_HEARTBEAT Broker进行心跳
CONTROLLER_GET_SYNC_STATE_DATA 获取syncStateSet数据
UPDATE_CONTROLLER_CONFIG 更新ControllerManager配置
GET_CONTROLLER_CONFIG 读取ControllerManager配置
CLEAN_BROKER_DATA 清理Broker数据
CONTROLLER_GET_NEXT_BROKER_ID 获取下一个BrokerId
CONTROLLER_APPLY_BROKER_ID 写入BrokerId
CONTROLLER_REGISTER_BROKER 使用唯一的BrokerId注册Broker