Kafka 的 Broker 端动态配置

801 阅读2分钟

这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战

相关:Kafka 中重要的 Broker 端参数

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 <参数名>