apache/kafka
Configuration
Kafka has a lot of configuration options. They are not enumerated here — the source files below are the authoritative list — instead, this page is a map showing where every option lives, what governs validation, and how to find the canonical default.
How configurations are declared
Every config-bearing component has a *Config class that wires options through org.apache.kafka.common.config.ConfigDef (clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java). A ConfigDef.define(...) call records a name, type, default value, validator, importance, and description. AbstractConfig (clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java) then takes a raw Map<String,Object> of user-supplied properties and produces a typed config object.
Adding, removing, or renaming a configuration option requires a KIP. The description string declared in ConfigDef is what becomes the user-facing documentation entry — it must be complete and accurate.
Where to find each config class
Broker / controller
| Class | File |
|---|---|
KafkaConfig (the top-level broker config; aggregates the rest) |
core/src/main/scala/kafka/server/KafkaConfig.scala |
ServerConfigs |
server-common/src/main/java/org/apache/kafka/server/config/ServerConfigs.java |
KRaftConfigs |
server-common/src/main/java/org/apache/kafka/server/config/KRaftConfigs.java (and raft/src/main/java/org/apache/kafka/raft/KRaftConfigs.java for some Raft-specific knobs) |
ReplicationConfigs |
server-common/src/main/java/org/apache/kafka/server/config/ReplicationConfigs.java |
ServerLogConfigs |
server-common/src/main/java/org/apache/kafka/server/config/ServerLogConfigs.java |
QuotaConfigs |
server-common/src/main/java/org/apache/kafka/server/config/QuotaConfigs.java |
DelegationTokenManagerConfigs |
server-common/src/main/java/org/apache/kafka/server/config/DelegationTokenManagerConfigs.java |
MetadataLogConfig / QuorumConfig |
raft/src/main/java/org/apache/kafka/raft/MetadataLogConfig.java, QuorumConfig.java |
Per-topic
| Class | File |
|---|---|
LogConfig |
storage/src/main/java/org/apache/kafka/storage/internals/log/LogConfig.java |
TopicConfig |
clients/src/main/java/org/apache/kafka/common/config/TopicConfig.java (the user-facing names) |
LogConfig takes the broker defaults from ServerLogConfigs and overlays per-topic overrides supplied via kafka-configs.sh --topic.
Clients
| Class | File |
|---|---|
ProducerConfig |
clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java |
ConsumerConfig |
clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerConfig.java |
ShareConsumerConfig |
clients/src/main/java/org/apache/kafka/clients/consumer/ShareConsumerConfig.java |
AdminClientConfig |
clients/src/main/java/org/apache/kafka/clients/admin/AdminClientConfig.java |
CommonClientConfigs |
clients/src/main/java/org/apache/kafka/clients/CommonClientConfigs.java |
Streams
| Class | File |
|---|---|
StreamsConfig |
streams/src/main/java/org/apache/kafka/streams/StreamsConfig.java |
TopologyConfig |
streams/src/main/java/org/apache/kafka/streams/TopologyConfig.java |
StreamsConfig embeds the producer / consumer / admin / restore-consumer / global-consumer configs via key prefixes (producer.*, consumer.*, admin.*, main.consumer.*, restore.consumer.*, global.consumer.*).
Connect
| Class | File |
|---|---|
WorkerConfig |
connect/runtime/src/main/java/org/apache/kafka/connect/runtime/WorkerConfig.java |
DistributedConfig |
connect/runtime/.../runtime/distributed/DistributedConfig.java |
StandaloneConfig |
connect/runtime/.../runtime/standalone/StandaloneConfig.java |
ConnectorConfig / SourceConnectorConfig / SinkConnectorConfig |
connect/runtime/.../runtime/ |
Sample configuration files
config/ holds runnable starters:
config/server.properties— combined-mode broker+controller for development.config/broker.properties— broker role.config/controller.properties— controller role.config/producer.properties,config/consumer.properties— example client configs.config/connect-distributed.properties,config/connect-standalone.properties,config/connect-mirror-maker.properties— Connect.config/log4j2.yaml,config/tools-log4j2.yaml,config/connect-log4j2.yaml— Log4j 2 configs.
These files are also used by quickstart docs.
Dynamic broker configs
Most broker configs can be changed at runtime via kafka-configs.sh --entity-type brokers --alter. The plumbing is:
- Definitions of which configs are dynamic —
core/src/main/scala/kafka/server/DynamicBrokerConfig.scala(DynamicBrokerConfig.AllDynamicConfigs). - Reconfigurable components implement
org.apache.kafka.common.Reconfigurableand register withDynamicBrokerConfig. - Updates flow through
BrokerConfigrecords on the metadata log;BrokerMetadataPublishernotifies the config manager.
Per-cluster (default-broker) and per-broker overrides are layered: per-broker wins, then cluster-wide, then the static server.properties.
Per-topic configs
Topic-level overrides are stored as ConfigRecords in the metadata log keyed on (topic, name). They are applied on top of the broker default (ServerLogConfigs). Set via kafka-configs.sh --topic <name> --alter --add-config '<key>=<value>,...'.
Configuration providers (KIP-297)
org.apache.kafka.common.config.provider.ConfigProvider lets external sources (Vault, SSM, files, …) supply config values via ${provider:key} syntax. Implementations live in clients/src/main/java/org/apache/kafka/common/config/provider/. Wired in via config.providers=....
Validation
ConfigDef.Validator instances enforce ranges, allowed values, regex constraints, etc. on parse. Cross-config dependencies (e.g., enable.idempotence=true requires acks=all) are checked in component-specific validate* methods invoked by KafkaConfig / ProducerConfig / etc. — search for Util.checkArgument and validateValues in the *Config classes.
How docs are generated
The user-facing config docs (docs/configuration.html and per-component HTML) are generated at build time from the same ConfigDef data, ensuring the documentation stays in sync with the code. The generators live under docs/.
Tips
- Don't read defaults from
config/server.properties— read them from the*Configclass. The properties file is just a sample. - Don't rely on undocumented options. If an option isn't defined in a
ConfigDef, it is silently ignored. - Use
kafka-configs.sh --describe --all --entity-type brokers --entity-defaultto see what is actually in effect on a running cluster.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.