Apache kafka kafka streams客户端能否通过编程确定其消费者延迟
我正在开发一个使用kafka streams api的服务。我想知道是否有办法确定我的服务在消费记录方面落后了多少。我希望能够查询消费者滞后 以下是一些我正在努力实现的背景。我的服务使用streams api,它侦听输入主题,执行一些涉及状态的处理,并输出输出主题的记录 我想处理这样一个场景:我的服务崩溃,几个小时后又重新上线。在这段时间内,输入主题将积累大量积压的记录 一旦恢复联机,服务将开始使用输入主题中的所有累积记录,并输出大量关于输出主题的记录 我希望能够检测到这样一个事实,即我的服务有一个巨大的消费者滞后,如果是这样的话,就会暂停其输出。也就是说,我希望我的服务消耗所有累积的输入记录,直到它赶上接近实时的速度,然后才开始输出消息 到目前为止,我找到的最好的方法是连接一个Apache kafka kafka streams客户端能否通过编程确定其消费者延迟,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我正在开发一个使用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
的内部,您无法访问它,因此您需要创建自己的实例。