该组件的核心就是一个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 | 写 |