mirror of
https://github.com/didi/KnowStreaming.git
synced 2026-01-10 17:12:11 +08:00
1.9 KiB
1.9 KiB
Controller优先选举
在原生的kafka中,Controller角色的选举,是每个Broker抢占式的去zk写入节点
Controller任何一个Broker都有可能当选Controller; 但是Controller角色除了是一个正常的Broker外,还承担着Controller角色的一些任务; 具体情况 【kafka源码】Controller启动过程以及选举流程源码分析 当这台Broker本身压力很大的情况下,又当选Controller让Broker压力更大了; 所以我们期望让Controller角色落在一些压力较小的Broker上;或者专门用一台机器用来当做Controller角色; 基于这么一个需求,我们内部就对引擎做了些改造,用于支持Controller优先选举
改造原理
在
/config节点下新增了节点/config/extension/candidates/; 将所有需要被优先选举的BrokerID存放到该节点下面; 例如:/config/extension/candidates/0
当Controller发生重新选举的时候, 每个Broker都去抢占式写入/controller节点, 但是会先去节点/config/extension/candidates/节点获取所有子节点,获取到有一个BrokerID=0; 这个时候会判断一下是否跟自己的BrokerID相等; 不相等的话就sleep 3秒 钟; 这样的话,那么BrokerId=0这个Broker就会大概率当选Controller; 如果这个Broker挂掉了,那么其他Broker就可能会当选
PS: /config/extension/candidates/ 节点下可以配置多个候选Controller

