Spring Kafka Consumer - 打印Kafka Lag Info

时间:2017-09-29 15:23:16

标签: java kafka-consumer-api spring-kafka

我创建了一个从主题中读取的spring kafka使用者。有没有办法打印滞后信息,类似于我们打印分区信息的方式?

2 个答案:

答案 0 :(得分:2)

有一个命令行工具......

$ kafka-consumer-groups --bootstrap-server localhost:9092 --describe --group myGroup

TOPIC                          PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG        CONSUMER-ID                                       HOST                           CLIENT-ID
myTopic                        0          66              66              0          -                                           

修改

您可以运行命令行工具并捕获输出...

Process process = new ProcessBuilder()
        .command("/usr/local/bin/kafka-consumer-groups", "--bootstrap-server", "localhost:9092",
                "--describe", "--group", "siTestGroup")
        .start();
InputStream inputStream = process.getInputStream();
process.waitFor(10, TimeUnit.SECONDS);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
FileCopyUtils.copy(inputStream, baos);
System.out.println(new String(baos.toByteArray()));

答案 1 :(得分:1)

尽管未提供任何源代码,但我假设您是通过 @KafkaListener 注释实现了使用者的。 如here所述,我已经克服了使用 org.apache.kafka.clients.consumer.Consumer 接口描述的相同问题。可以在使用者方法的 @KafkaListener 注释下将其声明为参数。 该界面提供了 metrics()方法,该方法包含存储在 records-max-lag 属性中的使用者滞后信息。

private static final Logger LOGGER = LoggerFactory.getLogger(YourClass.class);

@KafkaListener(topics = "your-topic", groupId = "your-group-id", id = "your-client-id", containerFactory = "kafkaListenerContainerFactory")
public void listenerExample(List<String> msgs, @Header(KafkaHeaders.OFFSET) List<Long> offsets, Acknowledgment ack,
        Consumer<?, ?> consumer) {



    String lag = consumer.metrics().values().stream().filter(m -> "records-lag-max".equals(m.metricName().name()))
            .map(Metric::metricValue).map(Object::toString).distinct()
            .collect(Collectors.joining("", "[Kafka current consumer lag]", " records"));


    LOGGER.info(lag);


}

在这种情况下,我明确选择了 records-lag-max 属性。您可以选择其他任何消费者指标,列表位于Confluent Docs

上面的代码片段将具有以下输出: [Kafka current consumer lag] X records X是此窗口中任何分区的记录数量上的最大滞后。

重要提示:

我正在使用 Spring Kafka 库的 2.3.3.RELEASE 版本

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>