Status

Current state: Under Discussion

Discussion thread: None

JIRA:

Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).

Motivation

Since Apache Kafka 4.0, ZooKeeper has been removed and KRaft is the only supported mode (KIP-500). In KRaft mode, a single process can serve as a broker, a controller, or both. KIP-631 therefore introduced node.id to replace broker.id as the canonical node identifier.

However, the legacy broker.id configuration still exists and is treated as a synonym of node.id. If only one is set, the other is automatically populated with the same value. If both are explicitly set, they must be equal; otherwise, a ConfigException is thrown.

Having two configuration properties that must always hold the same value causes unnecessary confusion and contradicts the documentation, which describes node.id as required in KRaft mode.

Related ZooKeeper-era configurations such as broker.id.generation.enable and reserved.broker.max.id were already removed in Kafka 4.0, making broker.id the only remaining legacy identifier config. We should deprecate it to simplify the configuration surface and guide all users toward the single, canonical configuration: node.id.

Public Interfaces

This KIP proposes to deprecate the broker.id server configuration property in Apache Kafka 4.3 and remove it in Apache Kafka 5.0.

Config

Default

4.3

5.0

broker.id

-1

Deprecated

Removed

node.id

(required)

No change

No change

Notes:

No changes to public APIs, network protocols, metrics, or command-line tools.

Proposed Changes

Phase 1: Deprecation (Apache Kafka 4.3)

  1. Log deprecation warning: When broker.id is explicitly set in the server configuration, log a WARN-level message at startup:
    The 'broker.id' configuration is deprecated and will be removed in Apache Kafka 5.0. Please use 'node.id' instead.
    
  2. Preserve backward compatibility: The existing synonym mechanism will continue to function. Users who only set broker.id will still have it automatically copied to node.id. The validation requiring both to be equal (if both are explicitly set) also remains unchanged.

Phase 2: Removal (Apache Kafka 5.0)

  1. Remove broker.id configuration: The BROKER_ID_CONFIG will be removed from ServerConfigs. Setting it will result in an unknown configuration warning.
  2. Remove synonym logic: Remove the broker.id/node.id synonym handling from AbstractKafkaConfig.populateSynonyms().
  3. Retain internal brokerId() accessor: The brokerId() method will continue to exist for internal use, delegating to nodeId().

Behavior Matrix

The following table summarizes the expected behavior for each configuration scenario across version ranges:

Configuration

4.0 ~ 4.2 (Current)

4.3 ~ 4.x (Deprecated)

5.0 (Removed)

Only node.id set

Valid

Valid

Valid

Only broker.id set

Valid; node.id is auto-populated from broker.id

Valid + broker.id deprecation warning; node.id is auto-populated from broker.id

ConfigException: node.id is required

Both set, same value

Valid

Valid + broker.id deprecation warning

Valid; broker.id is ignored

Both set, different values

ConfigException: node.id must equal broker.id

ConfigException: node.id must equal broker.id

Valid; broker.id is ignored

Neither set

ConfigException: node.id is required

ConfigException: node.id is required

ConfigException: node.id is required

Note: In the 5.0 column, "ignored" means broker.id is treated as an unrecognized configuration, which logs a standard unknown config warning.

Compatibility, Deprecation, and Migration Plan

Migration Steps

Users should replace broker.id with node.id in their server configuration. If both are configured, simply remove broker.id.

Test Plan

Phase 1: Deprecation (Apache Kafka 4.3)

Unit tests to verify:

Phase 2: Removal (Apache Kafka 5.0)

Unit tests to verify:

Rejected Alternatives

None.

References