我的用例如下:
对于一个1小时的给定窗口,我想在特定的时间点,即窗口的一半、窗口完成时和窗口完成后的半小时,发送该窗口上的reduce函数的结果,以获取延迟数据。
为此,我实现了一个自定义触发器函数,它为每个元素注册这些计时器。据我所知,它们的重复数据消除效果很好。我还配置了适当的允许迟到时间。但我必须将它与上一个窗口触发器的事件完全匹配,否则在允许的延迟期结束时会触发一个额外的事件计时器。大概是为了Flink清理Windows?有没有办法不让这个漏洞进入我的自定义触发器呢?
现在,在下面的reduce函数中,我想用调度触发器的确切延迟来丰富结果。因此,我使用reduce函数作为预聚合,并对结果应用processWindow函数。起初,我想从当前水印中减去窗口时间的开始,但这并不是我所需要的,因为我的事件流随着时间的推移非常稀疏,因此触发时间戳和实际水印之间可能有几分钟的时间。
为了解决这个问题,我现在在triggers oneventtime函数的window状态中设置延迟值。然后我在ProcessWindow函数中检索它,但我不确定它的可靠性。是否总是保证在触发下一个eventtimer之前完成完全聚合?我最担心的场景是单个事件触发同一窗口的多个事件计时器。它们是按顺序执行的(oneventtime,aggregate,oneventtime,aggregate),还是在这种情况下不保证顺序。
事先谢谢你的帮助
暂无答案!
目前还没有任何答案,快来回答吧!