DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
A new interface
ClientTelemetryContextto hold the request and telemetry (just the push interval) context:Code Block language java title ClientTelemetryContext package org.apache.kafka.server.telemetry; import org.apache.kafka.server.authorizer.AuthorizableRequestContext; /** * Context provided to {@link ClientTelemetryReceiver} implementations when receiving client metrics. */ public interface ClientTelemetryContext { /** * The interval defined via <code>metrics.interval</code> in the client metrics subscription * @return The interval in milliseconds */ int pushIntervalMs(); /** * The context associated with this request * @return The AuthorizableRequestContext associated with this request */ AuthorizableRequestContext authorizableRequestContext(); }A new interface,
ClientTelemetryExporter, that works likeClientTelemetryReceiverbut usesClientTelemetryContext.Code Block language java package org.apache.kafka.server.telemetry; /** * {@code ClientTelemetryExporter} defines the behaviour for telemetry exporter on the broker side * which receives client telemetry metrics. */ public interface ClientTelemetryExporter { /** * Called by the broker when a client reports telemetry metrics. The associated telemetry context * can be used by the metrics plugin to retrieve additional client information such as client ids, * endpoints or the push interval. * <p> * This method may be called from the request handling thread, and as such should avoid blocking. * * @param context the client telemetry context for the corresponding {@code PushTelemetryRequest} * api call. * @param payload the encoded telemetry payload as sent by the client. */ void exportMetrics(ClientTelemetryContext context, ClientTelemetryPayload payload); }A new interface,
ClientTelemetryExporterProvider, that works likeClientTelemetrybut provides aClientTelemetryExporterinstance instead ofClientTelemetryReceiver.Code Block language java import org.apache.kafka.common.metrics.MetricsReporter; /** * A {@link MetricsReporter} may implement this interface to indicate support for collecting client * telemetry on the server side. */ public interface ClientTelemetryExporterProvider { /** * Called by the broker to fetch instance of {@link ClientTelemetryExporter}. * <p> * This instance may be cached by the broker. * * @return broker side instance of {@link ClientTelemetryExporter}. */ ClientTelemetryExporter clientExporterclientTelemetryExporter(); }
Proposed Changes
Deprecate the existing
ClientTelemetryReceiverandClientTelemetryinterfaces and recommend users to instead useClientTelemetryExporterandClientTelemetryExporterProviderrespectively.- Brokers will support both
ClientTelemetryandClientTelemetryExporterProviderimplementations, and call the appropriate methods depending on the type of class provided. - If a class implements both
ClientTelemetryandClientTelemetryExporterProvider, only the methods fromClientTelemetryExporterProvider, which is the new class, will be used.
...