这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战
Broker 端的动态参数
在《# Kafka 中重要的 Broker 端参数》这篇中,我写了一些常用的可以在 config/server.properties
文件中配置的 Broker 端参数,这些参数也叫做静态参数,所谓静态参数就是,要在 Broker 实例启动前,一次性配置好,当 Broker 启动之后,这些参数的值就不能再修改了,或者说,修改后,只有重启 Broker 才能生效。
除了这些运行过程中不能修改的配置,Kafka 还提供了一些可以动态配置的参数。注意,并非所有的参数都可以动态配置,且 Kafka 1.1 之后的版本才支持动态配置的特性。
这里顺便说一下参数的 Update Mode,在 Kafka 的官方文档中,Broker 配置参数列表里每一个参数有一个 Update Mode 属性,Update Mode 的值有三种:
read-only
:表示这个参数只有通过重启 Broker 才能生效。per-broker
:表示这个参数属于动态参数,修改之后,会在对应的 Broker 生效。cluster-wide
:表示这个参数术语动态参数,修改之后,会在整个集群范围内生效。这类参数也可以为单个 Broker 设定。
以上三者,从它们的名称也可以看出他们的特点。
另外,与静态参数保存在配置文件中不同,动态参数是保存在 ZooKeeper 中的。
动态参数的配置方法
设置 Broker 端的动态参数主要通过 Kafka 目录中的 bin/.kafka-configs.sh
完成:
$ bin/kafka-configs.sh --bootstrap-server <host>:<port> --entity-type brokers --entity-default --alter --add-config <参数名>=<值>
在上面的命令里面:
--entity-type brokers
表示要设置 Broker 端的参数。--entity-default
表示为整个集群设置 cluster-wide 范围的动态参数。- 另外,虽然
--add-config
直接理解叫做「添加配置」,但如果设置一个已经存在的配置参数,那么新的值会覆盖旧的值,且为单个 Broker 设置的值,在对应的节点上会覆盖为整个集群设置的值。
如果要为单个节点设置参数:
bin/kafka-configs.sh --bootstrap-server <host>:<port> --entity-type brokers --entity-name <broker.id> --alter --add-config <参数名>=<值>
把 --entity-default
替换成 --entity-name <broker.id>
就行了,比如 --entity-name 1
。
配置完之后,也可以查看已经生效的配置:
bin/kafka-configs.sh --bootstrap-server <host>:<port> --entity-type brokers --entity-default --describe
无论是整个为整个集群配置的参数,还是为单个 Broker 配置的参数,都可以通过命令删除:
bin/kafka-configs.sh --bootstrap-server <host>:<port> --entity-type brokers --entity-default --alter --delete-config <参数名>