本文介绍了可以有条件地暂停和恢复Kafka Stream吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如@https://kafka.apache.org/21/documentation/streams/developer-guide/dsl-api.html#window-final-results所述,我有一个要求,即等待窗口关闭,以便通过在窗口持续时间内对其进行缓冲来处理后期无序事件。

根据我对此功能的理解,一旦创建了窗口,窗口的工作方式就像墙上的时钟处理一样,例如创建1小时的窗口,一旦第一个事件发生,窗口就会开始滴答作响。这个1小时窗口正好在一个小时后关闭,到目前为止缓冲的所有事件都将被转发到下游。然而,我需要能够保持此窗口更长时间,例如,根据外部系统(如数据库)中的状态/信息,有条件地保持多久。

准确地说,我对事件转发的要求是(如果外部状态记录为好,则1小时为窗口)或(保持直到外部记录为好,并继续跟踪事件,直到事件完全达到1小时,而不考虑外部系统不好的时间)为了详细说明第二种情况,例如,如果我的窗口持续1 1小时,我的事件在00:00开始,如果在00:30关闭,并在00:45恢复正常,则窗口应该延长到01:15。

是否可以根据我上面的要求有条件地暂停和恢复事件转发?我是否必须使用转换/处理器和手动使用值存储来跟踪事件的第一次处理时间,并有条件地使用标点符号转发缓冲的事件?

我感谢针对此要求所做的各种工作和建议。

推荐答案

不。Kafka流在Event-Time上工作,因此,从TimestampExtractor返回的时间戳(默认情况下是嵌入的记录时间戳)用于推进时间。

这需要自定义解决方案IMHO。

如果我理解这一部分,则不是100%。

我认为这可能是必需的。

查看这篇博客文章,它详细解释了suppress()如何工作,以及它何时根据观察到的事件-时间发出:https://www.confluent.io/blog/kafka-streams-take-on-watermarks-and-triggers

这篇关于可以有条件地暂停和恢复Kafka Stream吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-27 10:17