测量Kafka Streams中的处理吞吐量

时间:2018-03-20 08:58:47

标签: java apache-kafka

我在java中构建了一个流(对一些变量和类进行了简化):

    Map<String, Object> props = new HashMap<>();
    Properties config = new Properties();
    config.put(StreamsConfig.APPLICATION_ID_CONFIG, "my-stream-processing-application");
    config.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "my-kafka-broker:6667");
    config.put(StreamsConfig.KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass());
    config.put(StreamsConfig.VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass());

    KStreamBuilder builder = new KStreamBuilder();
    KStream<String, String> events = builder.stream("my-topic");

    events.foreach((key, value) -> {
        CustomClass instance = new CustomClass(value);
        for (AnotherCustomClass anotherInstance: someIterator) {
            anotherInstance(instance);
        }
    });

    KafkaStreams streams = new KafkaStreams(builder, config);
    streams.start();

for kafka 0.10.0.0

compile group: 'org.apache.kafka', name: 'kafka-streams', version: '0.10.0.0'
compile group: 'org.apache.kafka', name: 'kafka-clients', version: '0.10.0.0' 

我的问题如下:

  • 如何访问KafkaStreams streams.metrics循环中的foreach?为了阅读和/或打印处理的消息吞吐量
  • 更一般地说:如何衡量已处理的邮件吞吐量?已处理的意味着 anotherInstance(instance) 已被评估的消息

1 个答案:

答案 0 :(得分:1)

Kafka Streams通过JMX (Java Management Extensions)公开所有指标。您可以使用JConsoleVisualVM来检查这些指标。使用这些工具,您可以浏览所有指标并绘制图表。

要检查应用程序正在处理的消息数量,请查看该指标:

Error : Unexpected token: punc (()

它告诉您所有任务中每秒处理的平均消息数。

可以在official documentation.

中找到Kafka Streams指标的完整列表