目录
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.rules
sasl.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 命令查看