繁体   English   中英

Kafka消费者:抵消消费者和生产者之间的滞后

[英]Kafka consumer : offset lag between consumer and poducer

我正在编写一个 Kafka 消费者应用程序,其中每个分区都有一个消费者。 代码如下所示

while (true) {  
  ConsumerRecords<String, String> records = consumer.poll(100);   
        for (ConsumerRecord<String, String> record : records) {     
            System.out.printf("topic = %s, partition = %s, offset = %d, customer = %s, country = %s\n",        
            record.topic(), record.partition(), record.offset(), record.key(), record.value());   
 }    
  consumer.commitAsync(new OffsetCommitCallback() {       
        public void onComplete(Map<TopicPartition, OffsetAndMetadata> offsets, Exception e) {  
           if (e != null)              
              log.error("Commit failed for offsets {}", offsets, e); }}); 
}

有没有办法以编程方式访问和打印消费者滞后偏移量,或者说消费者读取的最后一条记录的偏移量与某个生产者写入该消费者分区的最后一条记录的偏移量之间的位置差异。

我应该在上面添加什么语句来获得滞后偏移值,知道我的最终目标是将这个值发送给普罗米修斯进行监控?

如果您的目标是在普罗米修斯中获取数据,您应该使用消费者发出的records-lag指标。

在文档的Consumer Fetch Metrics 部分的最后一张表中,您可以看到 Consumers 在每个主题分区上发出滞后(和领先)。

默认情况下,指标通过 JMX 发出,因此您可以使用Prometheus 的 JMX 导出器来完成这项工作。

您可以使用多种选项来监控您的消费者滞后。

使用 KafkaConsumer 的 endOffsets API

根据KafkaConsumer上的 JavaDocs,您可以使用endOffsets方法“获取给定分区的结束偏移量”。

使用 JMX 指标

您可以使用 JMX 指标来利用 Kafka 的监控功能。 监控 Kafka的文档中,解释了如何获取“消费者落后于生产者的消息数。由消费者发布,而不是经纪人发布。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM