卡夫卡流媒体客户端可以通过编程方式确定其消费者滞后吗

时间:2019-03-08 23:13:08

标签: apache-kafka apache-kafka-streams

我正在使用Kafka Streams API的服务上。我想知道是否有办法确定在使用记录时我的服务落后了多少。我希望能够查询消费者的滞后时间。

以下是我要达到的目标的背景。我的服务使用流api,它侦听输入主题,进行涉及状态的某些处理,并输出有关输出主题的记录。

我想解决我的服务崩溃,然后在几个小时后重新联机的情况。在此期间,将在输入主题上积压大量记录。

服务重新联机后,该服务将开始使用输入主题中的所有累积记录,并在输出主题中输出很多记录。

我希望能够发现我的服务存在巨大的消费者滞后的事实,并在这种情况下停止其输出。也就是说,我希望我的服务使用所有累积的输入记录,直到它接近实时为止,然后才应该开始输出消息。

到目前为止,我发现最好的方法是连接ConsumerInterceptor

每次读取记录时都会调用

ConsumerInterceptor.onConsume()方法:

    ConsumerRecords<K,V> onConsume(ConsumerRecords<K,V> records)

然后从ConsumerRecords中获取记录的时间戳。如果时间戳与当前时间相差太远,那么我将停止消息的输出。

如果我不以查询记录中的时间戳为基础,那么我可以以某种方式查询消费者的滞后情况会更好。

也许我无法查询消费者的滞后,因为它违背了卡夫卡的设计原则。如果有人有任何建议或我一般应如何解决我的问题,请告诉我。

请注意,我的服务未使用较高级别的kafka流DSL API,而是使用较低级别的处理器API。

谢谢您的时间。

0 个答案:

没有答案