Hello~~ 大家好,我是石臻臻~~~~
今天这篇文章,给大家分享一下最近看kafka中的动态配置,不需要重启Broker,即时生效的配置 欢迎留言一起探讨!
kafka中的配置
- Broker静态配置
.properties
文件
- ZK中的动态配置
全局 default
配置
- ZK中动态配置 指定配置
优先级从底到高
不想看过程,可以直接看最后的源码总结部分
1. Broker启动加载动态配置
KafkaServer.startup
1.1 启动加载动态配置总流程
1. 动态配置初始化
config.dynamicConfig.initialize(zkClient)
-
构造当前配置文件
currentConfig
, 然后从zk中获取节点/config/brokers/<default>
信息,然后更新配置updateDefaultConfig
; (动态默认配置覆盖静态配置) -
从节点
/config/brokers/{当前BrokerId}
获取配置, 如果配置中有ConfigType=PASSWORD
的配置(例如ssl.keystore.password
)存在,接着判断 是否存在password.encoder.old.secret
配置,(这个配置是用来加解密ConfigType=PASSWORD
的旧的秘钥),尝试用旧秘钥解密秘钥; 然后将这些配置重新加密回写入/config/brokers/{当前BrokerId}
; 然后返回配置 (这里主要是动态配置里面有密码类型配置的时候需要做一次解密加密处理) -
将上面得到的配置(password类型修改之后) 更新内存总的配置;优先级 静态配置<动态默认配置<指定动态配置
2. 注册可变更配置监听器
如果有对应的配置变更了,那么相应的监听器就会收到通知去修改自己相应的配置;
config.dynamicConfig.addReconfigurables(this)
DynamicBrokerConfig.addReconfigurables
// …
def addReconfigurables(kafkaServer: KafkaServer): Unit = {
kafkaServer.authorizer match {
case Some(authz: Reconfigurable) => addReconfigurable(authz)
case _ =>
}
ad