Skip to main content
The client metrics Interceptor terminates Kafka Improvement Proposal 714 (KIP-714) client telemetry in Gateway and forwards it to an OpenTelemetry (OTLP) collector. Kafka clients from 3.7.0 onward push metrics by default (enable.metrics.push=true), so you collect them without changing client code or configuration. Older clients don’t support KIP-714 and never push. Since Gateway handles the telemetry itself, your Kafka broker doesn’t need any KIP-714 setup: no CLIENT_METRICS resources and no client telemetry reporter plugin. This also works against brokers that don’t support KIP-714 at all. Use this Interceptor to observe producer and consumer health from a single place, even when clients run in networks you don’t control or can’t instrument directly.

How it works

Gateway tells each client which metrics to collect and how often to send them. Clients push their metrics to Gateway, which enriches each one with identity labels and forwards it to your collector. None of this reaches your Kafka broker. The identity labels let you group and filter metrics by client and by :

Configure the client metrics Interceptor

Gateway serves one subscription to all clients. Per-client subscriptions aren’t supported yet.

Choose an exporter

An exporter forwards each metric out of Gateway. It’s a standard Kafka telemetry plugin — a class implementing org.apache.kafka.server.telemetry.ClientTelemetryExporterProvider, loaded the same way Kafka loads metric.reporters. Gateway ships an OTLP exporter and uses it by default. To forward metrics somewhere else, set exporterClass to your own implementation of that interface and put its settings under exporterConfig. The settings a given exporter accepts are defined by that exporter — the ones below are specific to the default OTLP exporter.
Add a custom exporter to Gateway’s classpath by bind-mounting its JAR into the container’s /app/lib/ directory.

OTLP exporter configuration

These settings apply to the default OTLP exporter. Set them under exporterConfig. Any value can reference a Gateway environment variable with the ${MY_ENV_VAR} format. The truststore and keystore objects take these fields:

Client metrics Interceptor example

This example collects all metrics, tells clients to push every 5 minutes, and forwards to a plaintext collector.
To forward over TLS, drop insecure and set the collector endpoint to an https address or supply a truststore (and a keystore for mutual TLS).