
Kafka Streams 支持通过 metrics.recording.level 配置项灵活控制 JMX 指标采集粒度,仅启用 info、debug 或 trace 级别中的某一级,避免全量采集带来的性能开销。
kafka streams 支持通过 `metrics.recording.level` 配置项灵活控制 jmx 指标采集粒度,仅启用 info、debug 或 trace 级别中的某一级,避免全量采集带来的性能开销。
Kafka Streams 内置了一套细粒度的指标采集机制,默认提供三种记录级别(recording level):info、debug 和 trace。不同级别对应不同数量和维度的 JMX 指标:
-
info(推荐生产环境使用):仅暴露关键运行指标,例如:
- stream-state-metrics 中的 store 操作延迟与命中率;
- stream-thread-metrics 中的线程存活状态与任务吞吐量;
- processor-node-metrics 中的处理耗时与异常计数。 此级别对性能影响极小,适合长期监控。
debug:在 info 基础上增加中间状态指标(如缓存大小、窗口操作统计),适用于问题排查阶段。
trace:采集全部可观测指标(含高频采样项,如每条 record 的处理路径耗时),强烈不建议在生产环境启用,可能显著增加 GC 压力与 CPU 开销。
✅ 配置方式(Java):
在构建 StreamsConfig 时显式指定:
Properties props = new Properties(); props.put(StreamsConfig.APPLICATION_ID_CONFIG, "my-streams-app"); props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); props.put(StreamsConfig.METRICS_RECORDING_LEVEL_CONFIG, "info"); // ← 关键配置 // 其他配置... KafkaStreams streams = new KafkaStreams(topology, props);
⚠️ 注意事项:
- METRICS_RECORDING_LEVEL_CONFIG 是全局配置,无法为单个 processor 或 store 单独设置;
- 修改后需重启 Streams 应用才能生效;
- 即使设为 info,仍可通过 JMX 客户端(如 JConsole、Prometheus + JMX Exporter)按需拉取特定 MBean,无需开放全部指标端点;
- 若需进一步精简,可结合 JVM 参数 -Dcom.sun.management.jmxremote.port=... 配合防火墙或 JMX 访问控制策略,限制外部可读指标范围。
总结:不必在“全量暴露”与“完全关闭”之间二选一——合理选用 info 级别即可兼顾可观测性与性能,是 Kafka Streams 生产部署的最佳实践之一。











