Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Status

Current state: Under Discussion

Discussion thread: https://lists.apache.org/thread/01bs42crlkn5jr1r846vflp293zv2t86

JIRA: KAFKA-20018

Motivation

The `kafka-feature.sh` command-line tool currently has two issues that impact usability and consistency:

KAFKA-19749

The `--bootstrap-server` /` --bootstrap-controller` arguments are defined as a globally required group. This incorrectly prevents offline subcommands like `version-mapping` and `feature-dependencies` from running without providing unnecessary connection arguments. This behavior is inconsistent with other tools, such as `kafka-storage.sh`, which allows its `version-mapping` command to run without cluster connection arguments.

KAFKA-19544

A recent change introduced a backend flag (`unstableFeatureVersionsEnabled`) to `MetadataVersion.fromVersionString()` to control the inclusion of unstable metadata versions. This capability is not exposed to the user in the `version-mapping` command, making it impossible for users to control the query of the feature mapping for unstable versions.

...

The `MutuallyExclusiveGroup` for `--bootstrap-server` and `--bootstrap-controller` will be removed from the top-level parser. Instead, this required argument group will be added individually to each of the subcommands that require a live cluster connection: `describe`, `upgrade`, `downgrade`, and `disable`. This change makes the arguments required only when one of these specific subcommands is chosen, allowing offline commands to run without them.

Breaking Change Warning Message

Since this is a breaking change, it should be introduced in 5.0. A warning message will be added to the helping string in 4.x telling users that the group will be removed from the top level and become arguments under specific commands.

Expose Unstable Version Flag in version-mapping:

A new boolean flag, `--unstable-feature-versions`, will be added to the `version-mapping` subcommand in both `kafka-feature.sh` and `kafka-storage.sh`. When this flag is present, the tool will call `MetadataVersion.fromVersionString()` with the unstableFeatureVersionsEnabled flag set to true, allowing users to see feature mappings for development and testing versions. By default (without the flag), only production/stable metadata versions will be included.


Excluding unstable feature versions is the behavior before KAFKA-19544, so this is not a breaking change and can be introduced in 4.x.

New and Changed Public Interfaces

...

The `--bootstrap-server` / `--bootstrap-controller` arguments are no longer valid as top-level arguments. They must now be specified after the subcommand (e.g., `kafka-feature.sh describe --bootstrap-server ...`). 

Scripts invoking offline commands will no longer require these arguments.

...

This KIP introduces a breaking change to the command-line interface of kafka-feature.sh. Users must update existing scripts that use `kafka-features.sh`.

...