diff --git a/core/src/main/scala/kafka/server/KafkaConfig.scala b/core/src/main/scala/kafka/server/KafkaConfig.scala index 4df9c6fe960c0..d05ef90e6fba6 100755 --- a/core/src/main/scala/kafka/server/KafkaConfig.scala +++ b/core/src/main/scala/kafka/server/KafkaConfig.scala @@ -56,7 +56,11 @@ import scala.jdk.OptionConverters.RichOptional object KafkaConfig { def main(args: Array[String]): Unit = { - System.out.println(configDef.toHtml(4, (config: String) => "brokerconfigs_" + config, + val combined = new ConfigDef(configDef) + // Broker quota configs are dynamic-only and not defined in AbstractKafkaConfig.CONFIG_DEF, + // so we need to add them explicitly here for the generated HTML documentation. + QuotaConfig.brokerQuotaConfigs().configKeys().forEach((_, v) => combined.define(v)) + System.out.println(combined.toHtml(4, (config: String) => "brokerconfigs_" + config, JDynamicBrokerConfig.dynamicConfigUpdateModes)) } diff --git a/server-common/src/main/java/org/apache/kafka/server/config/QuotaConfig.java b/server-common/src/main/java/org/apache/kafka/server/config/QuotaConfig.java index 27a1c46bdad7a..ede737cb390ec 100644 --- a/server-common/src/main/java/org/apache/kafka/server/config/QuotaConfig.java +++ b/server-common/src/main/java/org/apache/kafka/server/config/QuotaConfig.java @@ -225,7 +225,7 @@ public static ConfigDef brokerQuotaConfigs() { ConfigDef.Importance.MEDIUM, QuotaConfig.REPLICA_ALTER_LOG_DIRS_IO_MAX_BYTES_PER_SECOND_DOC); } - public static final Set BROKER_QUOTA_CONFIGS = Set.copyOf(brokerQuotaConfigs().names()); + public static final Set BROKER_QUOTA_CONFIGS = Set.copyOf(brokerQuotaConfigs().names()); public static ConfigDef userAndClientQuotaConfigs() { ConfigDef configDef = new ConfigDef(); diff --git a/server/src/main/java/org/apache/kafka/server/config/DynamicBrokerConfig.java b/server/src/main/java/org/apache/kafka/server/config/DynamicBrokerConfig.java index 7d26793b9c2f2..4ccd3005b7d43 100644 --- a/server/src/main/java/org/apache/kafka/server/config/DynamicBrokerConfig.java +++ b/server/src/main/java/org/apache/kafka/server/config/DynamicBrokerConfig.java @@ -79,8 +79,8 @@ public class DynamicBrokerConfig { DynamicReplicationConfig.RECONFIGURABLE_CONFIGS, List.of(AbstractConfig.CONFIG_PROVIDERS_CONFIG), GroupCoordinatorConfig.RECONFIGURABLE_CONFIGS, - ShareCoordinatorConfig.RECONFIGURABLE_CONFIGS, - QuotaConfig.BROKER_QUOTA_CONFIGS) + DynamicQuotaConfig.RECONFIGURABLE_CONFIGS, + ShareCoordinatorConfig.RECONFIGURABLE_CONFIGS) .flatMap(Collection::stream) .collect(Collectors.toUnmodifiableSet()); @@ -279,4 +279,8 @@ public static class DynamicReplicationConfig { public static final Set RECONFIGURABLE_CONFIGS = Set.of( ReplicationConfigs.FOLLOWER_FETCH_LAST_TIERED_OFFSET_ENABLE_CONFIG); } + + public static class DynamicQuotaConfig { + public static final Set RECONFIGURABLE_CONFIGS = QuotaConfig.BROKER_QUOTA_CONFIGS; + } } diff --git a/server/src/main/java/org/apache/kafka/server/config/DynamicConfig.java b/server/src/main/java/org/apache/kafka/server/config/DynamicConfig.java index e1e7ccfd24556..db9c7cf4fd44f 100644 --- a/server/src/main/java/org/apache/kafka/server/config/DynamicConfig.java +++ b/server/src/main/java/org/apache/kafka/server/config/DynamicConfig.java @@ -24,8 +24,9 @@ import java.util.Set; /** - * Class used to hold dynamic configs. These are configs which have no physical manifestation in the server.properties - * and can only be set dynamically. + * Holds dynamic configs, including both dynamic-only configs which have no physical manifestation in server.properties and + * can only be set dynamically (i.e., {@link QuotaConfig#brokerQuotaConfigs()}), and dual-mode configs that can be set + * statically or dynamically. */ public class DynamicConfig {