如何从 Vert.x Kafka 生产者客户端获取 Kafka 客户端指标

How to get Kafka client metrics from the Vert.x Kafka producer client

我是 Vert.x 的新手,也是 Kafka 的新手。

如何设置我的 Vert.x KafkaProducer 以导出 Prometheus 指标?

目前,我可以启用 vertx_http_server_request_bytes_max 等 Prometheus 指标,并通过网络服务器查看它们:

// simplified

import io.vertx.kafka.client.producer.KafkaProducer;
// ...
Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(
    new MicrometerMetricsOptions()
        .setPrometheusOptions(new VertxPrometheusOptions().setEnabled(true))
        .setEnabled(true)));
// ...
// set up HttpServer then add a route for the metrics
Router.router(vertx).route("/metrics").handler(PrometheusScrapingHandler.create());
// ...
// create a new io.vertx.kafka.client.producer.KafkaProducer
producer = KafkaProducer.create(vertx, config);

在使用 Vert.x 之前,我可以使用 Apache KafkaProducer 并像这样绑定 KafkaClientMetrics:

import io.micrometer.core.instrument.binder.kafka.KafkaClientMetrics;
import org.apache.kafka.clients.producer.KafkaProducer;
// ...
// after creating a producer
new KafkaClientMetrics(producer).bindTo(BackendRegistries.getDefaultNow());

有关如何获取常用 Kafka 客户端指标的任何建议,例如kafka_producer_buffer_total_bytes 和其他人来自 Vert.x KafkaProducer?

更新:按照 Jonatan 关于查看创建 SharedProducer 的代码的建议,我设法使以下内容起作用:

KafkaWriteStream<String, String> stream = KafkaWriteStream.create(vertx, config);

// unwrap to get org.apache.kafka.clients.producer.Producer
Producer<String, String> apacheProducer = stream.unwrap();

// create io.vertx.kafka.client.producer.KafkaProducer
KafkaProducer vertxProducer = (new KafkaProducerImpl(vertx, stream)).registerCloseHook();

// set up metrics
MeterRegistry registry = BackendRegistries.getDefaultNow();
new KafkaClientMetrics(apacheProducer).bindTo(registry);

我已经通过触发 vertxProducer.send() 并监控普罗米修斯指标来测试了这一点。

Micrometer 正在为每个 Kafka Metric 创建一个 Meter。它只需调用 producer.metrics() (look into KafkaClientMetrics) 即可获取它们。有了这个,您的选择是:

  1. 从 vert.x Kafka 客户端获取 Kafka Producer 的引用(检查 vertx kafka 客户端中的 SharedProducer
  2. 请求 vert.x 维护者提供一个 metrics() 方法
  3. 请 vert.x 维护者为他们的客户提供工具
  4. 看一看Kafka binder in micrometer的旧仪器,它使用JMX创建meters