我有一个包含数据和时间戳记的记录日志,并且Flink应用程序按时间戳记的升序接收记录。某个键中的第一项到达窗口后,我想在X事件时间之后关闭窗口,并检查是否有足够的项到达某种条件,并为该键发出通过或失败的提示。
使用Flink中的基本窗口功能是否不可能?例如,如果我希望窗口长30秒,但是键的第一个项到达15秒,最后一个项到达40秒,则似乎该窗口将在30秒关闭,并且该键的记录轨迹将被分为两个窗口。在这种情况下,我想要的是窗口在事件发生时的15秒处开始并在45点关闭。
答案 0 :(得分:2)
根据我的经验,在KeyedProcessFunction
中使用这些用例比使用自定义窗口更容易实现(内置窗口无法满足您的要求):
processElement
中,您可以将元素缓冲到托管状态,并为将来的某个时间(30秒)注册一个计时器onTimer
中,检查是否有足够的元素到达,评估条件并向下游发射。