我正在使用Kafka Streams API的服务上。我想知道是否有办法确定在使用记录时我的服务落后了多少。我希望能够查询消费者的滞后时间。
以下是我要达到的目标的背景。我的服务使用流api,它侦听输入主题,进行涉及状态的某些处理,并输出有关输出主题的记录。
我想解决我的服务崩溃,然后在几个小时后重新联机的情况。在此期间,将在输入主题上积压大量记录。
服务重新联机后,该服务将开始使用输入主题中的所有累积记录,并在输出主题中输出很多记录。
我希望能够发现我的服务存在巨大的消费者滞后的事实,并在这种情况下停止其输出。也就是说,我希望我的服务使用所有累积的输入记录,直到它接近实时为止,然后才应该开始输出消息。
到目前为止,我发现最好的方法是连接ConsumerInterceptor
。
ConsumerInterceptor.onConsume()
方法:
ConsumerRecords<K,V> onConsume(ConsumerRecords<K,V> records)
然后从ConsumerRecords
中获取记录的时间戳。如果时间戳与当前时间相差太远,那么我将停止消息的输出。
如果我不以查询记录中的时间戳为基础,那么我可以以某种方式查询消费者的滞后情况会更好。
也许我无法查询消费者的滞后,因为它违背了卡夫卡的设计原则。如果有人有任何建议或我一般应如何解决我的问题,请告诉我。
请注意,我的服务未使用较高级别的kafka流DSL API,而是使用较低级别的处理器API。
谢谢您的时间。