kafka动态配置详解
目录
- Broker配置
- Broker静态配置
- Broker动态配置
- Broker动态配置列表
- Broker动态配置操作
- cluster-wide 范围值查看
- cluster-wide 范围值 修改
- per-broker 范围值 查看
- per-broker 范围值 修改
- per-broker 范围值 删除
- cluster-wide 范围值 删除
- 高概率调整配置
- 主题Topic配置
- 主题Topic动态配置列表
- 查看
- 配置
- 动态配置存储
- zookeeper模式
- kraft 模式
kafka-configs.sh 是 Kafka 提供的一个命令行工具,用于管理 Kafka broker、主题 (topic)、消费者组 (consumer group) 等资源的配置。
Broker配置
Broker静态配置
通常情况下,我们会指定config路径下的server.properties 文件的来启动 Broker。
如果要设置 Broker 端的任何参数,我们必须在这个文件中显式地增加一行对应的配置,之后启动 Broker 进程,令参数生效。我们常见的做法是,一次性设置好所有参数之后,再启动 Broker。当后面需要变更任何参数时,我们必须重启 Broker。
在真正的生产环境中,随意重启Broker是不被允许的。所以需要有动态调整Broker参数的方法。
Broker动态配置
参考kafka配置说明,Dynamic Update Mode 列。该列有 3 类值,分别是 read-only、per-broker 和 cluster-wide。
- read-only。被标记为 read-only 的参数和原来的参数行为一样,只有重启 Broker,才能令修改生效。
- per-broker。被标记为 per-broker 的参数属于动态参数,修改它之后,只会在对应的 Broker 上生效。
- cluster-wide。被标记为 cluster-wide 的参数也属于动态参数,修改它之后,会在整个集群范围内生效,也就是说,对所有 Broker 都生效。你也可以为具体的 Broker 修改 cluster-wide 参数。
原文地址
Broker动态配置列表
来自于./bin/kafka-configs.sh --help
For entity-type 'brokers': advertised.listeners background.threads compression.type follower.replication.throttled.rate leader.replication.throttled.rate listener.security.protocol.map listeners log.cleaner.backoff.ms log.cleaner.dedupe.buffer.size log.cleaner.delete.retention.ms log.cleaner.io.buffer.load.factor log.cleaner.io.buffer.size log.cleaner.io.max.bytes.per.second log.cleaner.max.compaction.lag.ms log.cleaner.min.cleanable.ratio log.cleaner.min.compaction.lag.ms log.cleaner.threads log.cleanup.policy log.flush.interval.messages log.flush.interval.ms log.index.interval.bytes log.index.size.max.bytes log.local.retention.bytes log.local.retention.ms log.message.downconversion.enable log.message.timestamp.after.max.ms log.message.timestamp.before.max.ms log.message.timestamp.difference.max.ms log.message.timestamp.type log.preallocate log.retention.bytes log.retention.ms log.roll.jitter.ms log.roll.ms log.segment.bytes log.segment.delete.delay.ms max.connection.creation.rate max.connections max.connections.per.ip max.connections.per.ip.overrides message.max.bytes metric.reporters min.insync.replicas num.io.threads num.network.threads num.recovery.threads.per.data.dir num.replica.fetchers principal.builder.class producer.id.expiration.ms remote.log.index.file.cache.total. size.bytes replica.alter.log.dirs.io.max.bytes. per.second sasl.enabled.mechanisms sasl.jaas.config sasl.kerberos.kinit.cmd sasl.kerberos.min.time.before.relogin sasl.kerberos.principal.to.local.rulessasl.kerberos.service.name sasl.kerberos.ticket.renew.jitter sasl.kerberos.ticket.renew.window. factor sasl.login.refresh.buffer.seconds sasl.login.refresh.min.period.seconds sasl.login.refresh.window.factor sasl.login.refresh.window.jitter sasl.mechanism.inter.broker.protocol ssl.cipher.suites ssl.client.auth ssl.enabled.protocols ssl.endpoint.identification.algorithm ssl.engine.factory.class ssl.key.password ssl.keymanager.algorithm ssl.keystore.certificate.chain ssl.keystore.key ssl.keystore.location ssl.keystore.password ssl.keystore.type ssl.protocol ssl.provider ssl.secure.random.implementation ssl.trustmanager.algorithm ssl.truststore.certificates ssl.truststore.location ssl.truststore.password ssl.truststore.type transaction.partition.verification. enable unclean.leader.election.enable
Broker动态配置操作
如果要设置 cluster-wide 范围的动态参数,需要显式指定 entity-default
。
cluster-wide 范围值查看
./bin/kafka-configs.sh --bootstrap-server 192.168.37.10:9092 --entity-type brokers --entity-default --describe
cluster-wide 范围值 修改
./bin/kafka-configs.sh --bootstrap-server 192.168.37.10:9092 --entity-type brokers --entity-default --alter --add-config unclean.leader.election.enable=true
从输出来看,我们成功地在全局层面上设置该参数值为 true。注意 sensitive=false 的字眼,它表明我们要调整的参数不是敏感数据。如果我们调整的是类似于密码这样的参数时,该字段就会为 true,表示这属于敏感数据。
per-broker 范围值 查看
./bin/kafka-configs.sh --bootstrap-server 192.168.37.10:9092 --entity-type brokers --entity-name 1 --describe
[root@test-10 kafka_2.13-3.7.0]# ./bin/kafka-configs.sh --bootstrap-server 192.168.37.10:9092 --entity-type brokers --entity-name 1 --describe
Dynamic configs for broker 1 are:
per-broker 范围值 修改
./bin/kafka-configs.sh --bootstrap-server 192.168.37.10:9092 --entity-type brokers --entity-name 1 --alter --add-config unclean.leader.election.enable=false
这条命令的输出信息很多。我们关注两点即可。
- 在 Broker 1 层面上,该参数被设置成了 false,这表明命令运行成功了。
- 从倒数第二行可以看出,在全局层面上,该参数值依然是 true。这表明,我们之前设置的 cluster-wide 范围参数值依然有效。
per-broker 范围值 删除
./bin/kafka-configs.sh --bootstrap-server 192.168.37.10:9092 --entity-type brokers --entity-name 1 --alter --delete-config unclean.leader.election.enable
cluster-wide 范围值 删除
./bin/kafka-configs.sh --bootstrap-server 192.168.37.10:9092 --entity-type brokers --entity-default --alter --delete-config unclean.leader.election.enable
高概率调整配置
- log.retention.ms。
修改日志留存时间应该算是一个比较高频的操作,毕竟,我们不可能完美地预估所有业务的消息留存时长。虽然该参数有对应的主题级别参数可以设置,但拥有在全局层面上动态变更的能力,依然是一个很好的功能亮点。
- num.io.threads 和 num.network.threads。
这是我们在前面提到的两组线程池。就我个人而言,我觉得这是动态 Broker 参数最实用的场景了。毕竟,在实际生产环境中,Broker 端请求处理能力经常要按需扩容。如果没有动态 Broker 参数,我们是无法做到这一点的。
- 与 SSL 相关的参数。
主要是 4 个参数(ssl.keystore.type、ssl.keystore.location、ssl.keystore.password 和 ssl.key.password)。允许动态实时调整它们之后,我们就能创建那些过期时间很短的 SSL 证书。每当我们调整时,Kafka 底层会重新配置 Socket 连接通道并更新 Keystore。新的连接会使用新的 Keystore,阶段性地调整这组参数,有利于增加安全性。
- num.replica.fetchers。
这也是我认为的最实用的动态 Broker 参数之一。Follower 副本拉取速度慢,在线上 Kafka 环境中一直是一个老大难的问题。针对这个问题,常见的做法是增加该参数值,确保有充足的线程可以执行 Follower 副本向 Leader 副本的拉取。现在有了动态参数,你不需要再重启 Broker,就能立即在 Follower 端生效,因此我说这是很实用的应用场景。
主题Topic配置
主题Topic动态配置列表
For entity-type 'topics': cleanup.policy compression.type delete.retention.ms file.delete.delay.ms flush.messages flush.ms follower.replication.throttled. replicas index.interval.bytes leader.replication.throttled.replicas local.retention.bytes local.retention.ms max.compaction.lag.ms max.message.bytes message.downconversion.enable message.format.version message.timestamp.after.max.ms message.timestamp.before.max.ms message.timestamp.difference.max.ms message.timestamp.type min.cleanable.dirty.ratio min.compaction.lag.ms min.insync.replicas preallocate remote.storage.enable retention.bytes retention.ms segment.bytes segment.index.bytes segment.jitter.ms segment.ms unclean.leader.election.enable
查看
./bin/kafka-configs.sh --bootstrap-server 192.168.37.10:9092 --entity-type topics --entity-name test-topic --describe
配置
./bin/kafka-configs.sh --bootstrap-server 192.168.37.10:9092 --entity-type topics --entity-name test-topic --alter --add-config retention.ms=43200000
配置后查看效果:
动态配置存储
zookeeper模式
zookeeper模式的kafka,动态配置保存在zookeeper中。
kraft 模式
基于kraft模式 的kafka 动态配置在 主题 __cluster_metadata 中存储
可以通过 ./bin/kafka-metadata-shell.sh --snapshot data/__cluster_metadata-0/00000000000000000000.log 命令查看