Apache kafka kafka streams客户端能否通过编程确定其消费者延迟

Apache kafka kafka streams客户端能否通过编程确定其消费者延迟,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我正在开发一个使用kafka streams api的服务。我想知道是否有办法确定我的服务在消费记录方面落后了多少。我希望能够查询消费者滞后 以下是一些我正在努力实现的背景。我的服务使用streams api,它侦听输入主题,执行一些涉及状态的处理,并输出输出主题的记录 我想处理这样一个场景:我的服务崩溃,几个小时后又重新上线。在这段时间内,输入主题将积累大量积压的记录 一旦恢复联机,服务将开始使用输入主题中的所有累积记录,并输出大量关于输出主题的记录 我希望能够检测到这样一个事实,即我的服务有

我正在开发一个使用kafka streams api的服务。我想知道是否有办法确定我的服务在消费记录方面落后了多少。我希望能够查询消费者滞后

以下是一些我正在努力实现的背景。我的服务使用streams api,它侦听输入主题,执行一些涉及状态的处理,并输出输出主题的记录

我想处理这样一个场景:我的服务崩溃,几个小时后又重新上线。在这段时间内,输入主题将积累大量积压的记录

一旦恢复联机,服务将开始使用输入主题中的所有累积记录,并输出大量关于输出主题的记录

我希望能够检测到这样一个事实,即我的服务有一个巨大的消费者滞后,如果是这样的话,就会暂停其输出。也就是说,我希望我的服务消耗所有累积的输入记录,直到它赶上接近实时的速度,然后才开始输出消息

到目前为止,我找到的最好的方法是连接一个
消费者接收器

每次读取记录时都将调用ConsumerInterceptor.onConsume()方法:

    ConsumerRecords<K,V> onConsume(ConsumerRecords<K,V> records)
ConsumerRecords onConsume(消费者记录记录)
消费者记录
,我可以获得记录的时间戳。如果时间戳远远落后于当前时间,那么我将暂停消息的输出

与其基于记录中的时间戳,不如以某种方式查询消费者延迟

也许我不能质疑消费者的滞后,因为这违背了卡夫卡的设计原则。如果有人有任何建议或我应该如何处理我的问题,那么请让我知道

作为补充说明,我的服务没有使用更高级别的kafka streams DSL API,而是使用较低级别的处理器API


谢谢您的时间。

AdminClient#listConsumerGroupOffsets(…)
可能是您的朋友。@MatthiasJ.Sax感谢您的回复,我将查看
AdminClient
。我注意到每当我使用以下构造函数创建我的
KafkaStreams
时:
KafkaStreams(拓扑,java.util.props)
KafkaStreams
中已经创建了一个
AdminClient
,因为我可以在日志中看到日志中打印的
AdminClientConfig
。我有没有办法重用已经可用的
AdminClient
或者需要创建另一个
AdminClient
实例?您看到的
AdminClient
KafkaStreams
的内部,您无法访问它,因此您需要创建自己的实例。