Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 春季卡夫卡消费者-打印卡夫卡滞后信息_Java_Kafka Consumer Api_Spring Kafka - Fatal编程技术网

Java 春季卡夫卡消费者-打印卡夫卡滞后信息

Java 春季卡夫卡消费者-打印卡夫卡滞后信息,java,kafka-consumer-api,spring-kafka,Java,Kafka Consumer Api,Spring Kafka,我已经创建了一个spring kafka消费者,它可以阅读某个主题。有没有一种方法可以像打印分区信息一样打印延迟信息?有一个命令行工具 $ kafka-consumer-groups --bootstrap-server localhost:9092 --describe --group myGroup TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID

我已经创建了一个spring kafka消费者,它可以阅读某个主题。有没有一种方法可以像打印分区信息一样打印延迟信息?

有一个命令行工具

$ 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()));

有一个命令行工具

$ 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()));

虽然没有提供源代码,但我假设您通过@KafkaListener注释实现了您的消费者。 如前所述,我已经克服了您描述的使用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);


}

虽然没有提供源代码,但我假设您通过@KafkaListener注释实现了您的消费者。 如前所述,我已经克服了您描述的使用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);


}

谢谢你,加里。有没有一种方法可以用SpringKafka编程实现呢。我想把延迟作为日志消息的一部分打印出来;与Scala版本不同,Java版本的
AdminClient
没有
describeConsumerGroup()
方法。您必须将scala jar添加到类路径中,并编写一个scala类来完成当前在
ConsumerGroupCommand.kafkanconSumerGroupService
中的大部分工作。谢谢您的帮助,Gary。有没有办法添加此功能请求?您必须打开一个窗口,要求他们在java
AdminClient
上实现此方法。如果你只是想记录信息,我已经在我的问题中添加了一个编辑,作为绕过限制的一种方法。谢谢Gary。有没有一种方法可以用SpringKafka编程实现呢。我想把延迟作为日志消息的一部分打印出来;与Scala版本不同,Java版本的
AdminClient
没有
describeConsumerGroup()
方法。您必须将scala jar添加到类路径中,并编写一个scala类来完成当前在
ConsumerGroupCommand.kafkanconSumerGroupService
中的大部分工作。谢谢您的帮助,Gary。有没有办法添加此功能请求?您必须打开一个窗口,要求他们在java
AdminClient
上实现此方法。如果你只是想记录信息,我已经添加了一个编辑我的问题的一种方法来绕过限制。