
Status
Current state: "Under Discussion"
Discussion thread: here
Vote thread: here
JIRA: 

Motivation
Kafka metrics have traditionally followed a consistent naming convention using the kafka.<COMPONENT> format. However, some inconsistencies were unintentionally introduced during recent refactorings:
- The metrics under org.apache.kafka.server:type=AssignmentsManager were originally named using the kafka.<COMPONENT> format. This changed unexpectedly when classes were moved from the kafka.server package to org.apache.kafka.server as part of this commit.
- Similarly, the org.apache.kafka.storage.internals.log:type=RemoteStorageThreadPool metric was initially intended to follow the same convention. However, an incorrect metric name was introduced during initialization in a later patch.
These changes went unnoticed, and subsequent users began using the new org.apache.kafka.<COMPONENT> pattern, diverging from the established convention.
This KIP proposes to standardize Kafka metric naming by reverting the following metrics to the correct kafka.<COMPONENT> format to ensure consistency across the system:
org.apache.kafka.server:type=AssignmentsManager → kafka.server:type=AssignmentsManager
org.apache.kafka.storage.internals.log:type=RemoteStorageThreadPool → kafka.log.remote:type=RemoteStorageThreadPool
This change will align these metrics with the broader Kafka metrics ecosystem and avoid confusion for users and tooling that rely on consistent naming.
Public Interface
Proposed Changes
Introduce new metrics, consistent with other Kafka metrics.
This change will impact external monitoring systems that rely on the old metric name; corresponding updates will be required.
Deprecate the following metrics
- org.apache.kafka.storage.internals.log:type=RemoteStorageThreadPool.RemoteLogReaderTaskQueueSize
- org.apache.kafka.storage.internals.log:type=RemoteStorageThreadPool.RemoteLogReaderAvgIdlePercent
- org.apache.kafka.server:type=AssignmentsManager.QueuedReplicaToDirAssignments
Introduce following new metric:
- kafka.log.remote:type=RemoteStorageThreadPool.RemoteLogReaderAvgIdlePercent
- kafka.log.remote:type=RemoteStorageThreadPool.RemoteLogReaderTaskQueueSize
- kafka.server:type=AssignmentsManager.QueuedReplicaToDirAssignments
This change will impact external monitoring systems that rely on the old metric name; corresponding updates will be required.
Since `REMOTE_LOG_READER_TASK_QUEUE_SIZE_METRIC` and `REMOTE_LOG_READER_AVG_IDLE_PERCENT_METRIC` are part of the public API, we introduce corresponding deprecated fields as a temporary bridge.
These fields are marked as deprecated because they serve as a transitional solution. They will be removed in Kafka 5.0.
@Deprecated(since = "4.2")
public static final MetricName BRIDGE_REMOTE_LOG_READER_TASK_QUEUE_SIZE_METRIC = getMetricName(
"kafka.log.remote", "RemoteStorageThreadPool", REMOTE_LOG_READER_TASK_QUEUE_SIZE);
@Deprecated(since = "4.2")
public static final MetricName BRIDGE_REMOTE_LOG_READER_AVG_IDLE_PERCENT_METRIC = getMetricName(
"kafka.log.remote", "RemoteStorageThreadPool", REMOTE_LOG_READER_AVG_IDLE_PERCENT); |
Compatibility, Deprecation, and Migration Plan
- We will add a deprecated annotation on following constant
- `RemoteStorageMetrics#REMOTE_LOG_READER_TASK_QUEUE_SIZE_METRIC`
- `RemoteStorageMetrics#REMOTE_LOG_READER_AVG_IDLE_PERCENT_METRIC`
- `AssignmentsManager#QUEUED_REPLICA_TO_DIR_ASSIGNMENTS_METRIC`
- Add two new bridge fields to `RemoteStorageMetrics` and mark them as deprecated:
- `BRIDGE_REMOTE_LOG_READER_TASK_QUEUE_SIZE_METRIC`
- `BRIDGE_REMOTE_LOG_READER_AVG_IDLE_PERCENT_METRIC`
- Update the Kafka documentation to note MBean will be replaced
- `org.apache.kafka.storage.internals.log:type=RemoteStorageThreadPool.RemoteLogReaderTaskQueueSize`
- `org.apache.kafka.storage.internals.log:type=RemoteStorageThreadPool.RemoteLogReaderAvgIdlePercent`
- `org.apache.kafka.server:type=AssignmentsManager.QueuedReplicaToDirAssignments`
- Register folowing new metrics
- `kafka.log.remote:type=RemoteStorageThreadPool.RemoteLogReaderTaskQueueSize`
- `kafka.log.remote:type=RemoteStorageThreadPool.RemoteLogReaderAvgIdlePercent`
- `kafka.server:type=AssignmentsManager.QueuedReplicaToDirAssignments`
- Delete following all usage in code base at the Kafka 5.0
- `RemoteStorageMetrics#REMOTE_LOG_READER_TASK_QUEUE_SIZE_METRIC`
- `RemoteStorageMetrics#REMOTE_LOG_READER_AVG_IDLE_PERCENT_METRIC`
- `AssignmentsManager#QUEUED_REPLICA_TO_DIR_ASSIGNMENTS_METRIC`
- `BRIDGE_REMOTE_LOG_READER_TASK_QUEUE_SIZE_METRIC`
- `BRIDGE_REMOTE_LOG_READER_AVG_IDLE_PERCENT_METRIC`
- Update the group name to `kafka.log.remote` for the following fields in `RemoteStorageMetrics`:
- REMOTE_LOG_READER_TASK_QUEUE_SIZE_METRIC
- REMOTE_LOG_READER_AVG_IDLE_PERCENT_METRIC
Test Plan
- Add new tests to verify the new metric is correctly registered and behaves as expected.
- Ensure backward compatibility by verifying deprecated metric behavior until removal.
Rejected Alternatives
n/a