You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "yuzhou (Jira)" <ji...@apache.org> on 2026/10/15 07:57:00 UTC

[jira] [Updated] (KAFKA-21285) Dynamic configs less than half the value in server.properties will not take effect after restart in kraft mode

     [ https://issues.apache.org/jira/browse/KAFKA-21285?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

yuzhou updated KAFKA-21285:
---------------------------
    Description: 
Dynamic configs less than half the value in server.properties will not take effect after restart in kraft mode
 * first, start kafka kraft mode, in server.properties, add "num.io.threads=16"
 * then, modify config from 16 to 8 then to 6
bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type brokers --entity-default --alter --add-config num.io.threads=8
bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type brokers --entity-default --alter --add-config num.io.threads=6
 * finally, restart broker.

after restart, log show:
[2026-10-15 15:45:10,838] INFO [DynamicConfigPublisher controller id=1] Updating cluster configuration : num.io.threads -> 6,min.insync.replicas -> 1 (kafka.server.metadata.DynamicConfigPublisher)
...
[2026-10-15 15:45:11,274] ERROR Failed to update broker configuration with configs :

{advertised.listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093, broker.id=1, controller.listener.names=CONTROLLER, controller.quorum.bootstrap.servers=localhost:9093, inter.broker.listener.name="PLAINTEXT", listener.security.protocol.map="CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL", listeners=PLAINTEXT://:9092,CONTROLLER://:9093, log.dirs=/tmp/kraft-combined-logs, log.retention.check.interval.ms=300000, log.retention.hours=168, log.segment.bytes=1073741824, min.insync.replicas=1, node.id=1, num.io.threads=6, num.network.threads=3, num.partitions=1, num.recovery.threads.per.data.dir=2, offsets.topic.replication.factor=1, process.roles=broker,controller, share.coordinator.state.topic.min.isr=1, share.coordinator.state.topic.replication.factor=1, socket.receive.buffer.bytes=102400, socket.request.max.bytes=104857600, socket.send.buffer.bytes=102400, transaction.state.log.min.isr=1, transaction.state.log.replication.factor=1}

(kafka.server.DynamicBrokerConfig)
org.apache.kafka.common.config.ConfigException: Dynamic thread count update validation failed for num.io.threads=6, value should be at least half the current value 16
at org.apache.kafka.server.DynamicThreadPool.validateReconfiguration(DynamicThreadPool.java:51)
at kafka.server.BrokerDynamicThreadPool.validateReconfiguration(DynamicBrokerConfig.scala:647)
at kafka.server.DynamicBrokerConfig.$anonfun$processReconfiguration$3(DynamicBrokerConfig.scala:466)
at java.base/java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:807)
at kafka.server.DynamicBrokerConfig.processReconfiguration(DynamicBrokerConfig.scala:464)
at kafka.server.DynamicBrokerConfig.updateCurrentConfig(DynamicBrokerConfig.scala:437)
at kafka.server.DynamicBrokerConfig.$anonfun$updateDefaultConfig$1(DynamicBrokerConfig.scala:293)
at org.apache.kafka.server.util.LockUtils.inLock(LockUtils.java:96)
at org.apache.kafka.server.util.LockUtils.inWriteLock(LockUtils.java:115)
at kafka.server.DynamicBrokerConfig.updateDefaultConfig(DynamicBrokerConfig.scala:288)
at kafka.server.BrokerConfigHandler.processConfigChanges(ConfigHandler.scala:150)
at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$5(DynamicConfigPublisher.scala:81)
at scala.Option.foreach(Option.scala:437)
at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$2(DynamicConfigPublisher.scala:74)
at java.base/java.util.HashMap$KeySet.forEach(HashMap.java:1008)
at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$1(DynamicConfigPublisher.scala:57)
at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$1$adapted(DynamicConfigPublisher.scala:56)
at scala.Option.foreach(Option.scala:437)
at kafka.server.metadata.DynamicConfigPublisher.onMetadataUpdate(DynamicConfigPublisher.scala:56)
at kafka.server.metadata.BrokerMetadataPublisher.onMetadataUpdate(BrokerMetadataPublisher.scala:190)
at org.apache.kafka.image.loader.MetadataLoader.initializeNewPublishers(MetadataLoader.java:332)
at org.apache.kafka.image.loader.MetadataLoader.lambda$scheduleInitializeNewPublishers$0(MetadataLoader.java:288)
at org.apache.kafka.queue.KafkaEventQueue$EventContext.run(KafkaEventQueue.java:134)
at org.apache.kafka.queue.KafkaEventQueue$EventHandler.handleEvents(KafkaEventQueue.java:217)
at org.apache.kafka.queue.KafkaEventQueue$EventHandler.run(KafkaEventQueue.java:188)
at java.base/java.lang.Thread.run(Thread.java:840)

 

the actcual num.io.threads is 16 , expected 6

  was:
Dynamic configs less than half the value in server.properties will not take effect after restart in kraft mode

first, start kafka kraft mode, in server.properties, add "num.io.threads=16"
then, modify config from 16 to 8 then to 6
bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type brokers --entity-default --alter   --add-config num.io.threads=8
bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type brokers --entity-default --alter   --add-config num.io.threads=6
finally, restart broker.

after restart, log show:
[2026-10-15 15:45:10,838] INFO [DynamicConfigPublisher controller id=1] Updating cluster configuration : num.io.threads -> 6,min.insync.replicas -> 1 (kafka.server.metadata.DynamicConfigPublisher)
...
[2026-10-15 15:45:11,274] ERROR Failed to update broker configuration with configs : {advertised.listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093, broker.id=1, controller.listener.names=CONTROLLER, controller.quorum.bootstrap.servers=localhost:9093, inter.broker.listener.name="PLAINTEXT", listener.security.protocol.map="CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL", listeners=PLAINTEXT://:9092,CONTROLLER://:9093, log.dirs=/tmp/kraft-combined-logs, log.retention.check.interval.ms=300000, log.retention.hours=168, log.segment.bytes=1073741824, min.insync.replicas=1, node.id=1, num.io.threads=6, num.network.threads=3, num.partitions=1, num.recovery.threads.per.data.dir=2, offsets.topic.replication.factor=1, process.roles=broker,controller, share.coordinator.state.topic.min.isr=1, share.coordinator.state.topic.replication.factor=1, socket.receive.buffer.bytes=102400, socket.request.max.bytes=104857600, socket.send.buffer.bytes=102400, transaction.state.log.min.isr=1, transaction.state.log.replication.factor=1} (kafka.server.DynamicBrokerConfig)
org.apache.kafka.common.config.ConfigException: Dynamic thread count update validation failed for num.io.threads=6, value should be at least half the current value 16
        at org.apache.kafka.server.DynamicThreadPool.validateReconfiguration(DynamicThreadPool.java:51)
        at kafka.server.BrokerDynamicThreadPool.validateReconfiguration(DynamicBrokerConfig.scala:647)
        at kafka.server.DynamicBrokerConfig.$anonfun$processReconfiguration$3(DynamicBrokerConfig.scala:466)
        at java.base/java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:807)
        at kafka.server.DynamicBrokerConfig.processReconfiguration(DynamicBrokerConfig.scala:464)
        at kafka.server.DynamicBrokerConfig.updateCurrentConfig(DynamicBrokerConfig.scala:437)
        at kafka.server.DynamicBrokerConfig.$anonfun$updateDefaultConfig$1(DynamicBrokerConfig.scala:293)
        at org.apache.kafka.server.util.LockUtils.inLock(LockUtils.java:96)
        at org.apache.kafka.server.util.LockUtils.inWriteLock(LockUtils.java:115)
        at kafka.server.DynamicBrokerConfig.updateDefaultConfig(DynamicBrokerConfig.scala:288)
        at kafka.server.BrokerConfigHandler.processConfigChanges(ConfigHandler.scala:150)
        at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$5(DynamicConfigPublisher.scala:81)
        at scala.Option.foreach(Option.scala:437)
        at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$2(DynamicConfigPublisher.scala:74)
        at java.base/java.util.HashMap$KeySet.forEach(HashMap.java:1008)
        at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$1(DynamicConfigPublisher.scala:57)
        at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$1$adapted(DynamicConfigPublisher.scala:56)
        at scala.Option.foreach(Option.scala:437)
        at kafka.server.metadata.DynamicConfigPublisher.onMetadataUpdate(DynamicConfigPublisher.scala:56)
        at kafka.server.metadata.BrokerMetadataPublisher.onMetadataUpdate(BrokerMetadataPublisher.scala:190)
        at org.apache.kafka.image.loader.MetadataLoader.initializeNewPublishers(MetadataLoader.java:332)
        at org.apache.kafka.image.loader.MetadataLoader.lambda$scheduleInitializeNewPublishers$0(MetadataLoader.java:288)
        at org.apache.kafka.queue.KafkaEventQueue$EventContext.run(KafkaEventQueue.java:134)
        at org.apache.kafka.queue.KafkaEventQueue$EventHandler.handleEvents(KafkaEventQueue.java:217)
        at org.apache.kafka.queue.KafkaEventQueue$EventHandler.run(KafkaEventQueue.java:188)
        at java.base/java.lang.Thread.run(Thread.java:840)





> Dynamic configs less than half the value in server.properties will not take effect after restart in kraft mode
> --------------------------------------------------------------------------------------------------------------
>
>                 Key: KAFKA-21285
>                 URL: https://issues.apache.org/jira/browse/KAFKA-21285
>             Project: Kafka
>          Issue Type: Bug
>          Components: config
>    Affects Versions: 4.3.1
>            Reporter: yuzhou
>            Priority: Major
>
> Dynamic configs less than half the value in server.properties will not take effect after restart in kraft mode
>  * first, start kafka kraft mode, in server.properties, add "num.io.threads=16"
>  * then, modify config from 16 to 8 then to 6
> bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type brokers --entity-default --alter --add-config num.io.threads=8
> bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type brokers --entity-default --alter --add-config num.io.threads=6
>  * finally, restart broker.
> after restart, log show:
> [2026-10-15 15:45:10,838] INFO [DynamicConfigPublisher controller id=1] Updating cluster configuration : num.io.threads -> 6,min.insync.replicas -> 1 (kafka.server.metadata.DynamicConfigPublisher)
> ...
> [2026-10-15 15:45:11,274] ERROR Failed to update broker configuration with configs :
> {advertised.listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093, broker.id=1, controller.listener.names=CONTROLLER, controller.quorum.bootstrap.servers=localhost:9093, inter.broker.listener.name="PLAINTEXT", listener.security.protocol.map="CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL", listeners=PLAINTEXT://:9092,CONTROLLER://:9093, log.dirs=/tmp/kraft-combined-logs, log.retention.check.interval.ms=300000, log.retention.hours=168, log.segment.bytes=1073741824, min.insync.replicas=1, node.id=1, num.io.threads=6, num.network.threads=3, num.partitions=1, num.recovery.threads.per.data.dir=2, offsets.topic.replication.factor=1, process.roles=broker,controller, share.coordinator.state.topic.min.isr=1, share.coordinator.state.topic.replication.factor=1, socket.receive.buffer.bytes=102400, socket.request.max.bytes=104857600, socket.send.buffer.bytes=102400, transaction.state.log.min.isr=1, transaction.state.log.replication.factor=1}
> (kafka.server.DynamicBrokerConfig)
> org.apache.kafka.common.config.ConfigException: Dynamic thread count update validation failed for num.io.threads=6, value should be at least half the current value 16
> at org.apache.kafka.server.DynamicThreadPool.validateReconfiguration(DynamicThreadPool.java:51)
> at kafka.server.BrokerDynamicThreadPool.validateReconfiguration(DynamicBrokerConfig.scala:647)
> at kafka.server.DynamicBrokerConfig.$anonfun$processReconfiguration$3(DynamicBrokerConfig.scala:466)
> at java.base/java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:807)
> at kafka.server.DynamicBrokerConfig.processReconfiguration(DynamicBrokerConfig.scala:464)
> at kafka.server.DynamicBrokerConfig.updateCurrentConfig(DynamicBrokerConfig.scala:437)
> at kafka.server.DynamicBrokerConfig.$anonfun$updateDefaultConfig$1(DynamicBrokerConfig.scala:293)
> at org.apache.kafka.server.util.LockUtils.inLock(LockUtils.java:96)
> at org.apache.kafka.server.util.LockUtils.inWriteLock(LockUtils.java:115)
> at kafka.server.DynamicBrokerConfig.updateDefaultConfig(DynamicBrokerConfig.scala:288)
> at kafka.server.BrokerConfigHandler.processConfigChanges(ConfigHandler.scala:150)
> at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$5(DynamicConfigPublisher.scala:81)
> at scala.Option.foreach(Option.scala:437)
> at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$2(DynamicConfigPublisher.scala:74)
> at java.base/java.util.HashMap$KeySet.forEach(HashMap.java:1008)
> at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$1(DynamicConfigPublisher.scala:57)
> at kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$1$adapted(DynamicConfigPublisher.scala:56)
> at scala.Option.foreach(Option.scala:437)
> at kafka.server.metadata.DynamicConfigPublisher.onMetadataUpdate(DynamicConfigPublisher.scala:56)
> at kafka.server.metadata.BrokerMetadataPublisher.onMetadataUpdate(BrokerMetadataPublisher.scala:190)
> at org.apache.kafka.image.loader.MetadataLoader.initializeNewPublishers(MetadataLoader.java:332)
> at org.apache.kafka.image.loader.MetadataLoader.lambda$scheduleInitializeNewPublishers$0(MetadataLoader.java:288)
> at org.apache.kafka.queue.KafkaEventQueue$EventContext.run(KafkaEventQueue.java:134)
> at org.apache.kafka.queue.KafkaEventQueue$EventHandler.handleEvents(KafkaEventQueue.java:217)
> at org.apache.kafka.queue.KafkaEventQueue$EventHandler.run(KafkaEventQueue.java:188)
> at java.base/java.lang.Thread.run(Thread.java:840)
>  
> the actcual num.io.threads is 16 , expected 6



--
This message was sent by Atlassian Jira
(v8.20.10#820010)