如果到达的元素违反了水印条件,如何处理该事件?它被扔掉了吗?还是事件仍然向下游传播,过去的窗口函数用迟到的事件重新计算?
文档承认会发生延迟事件,但没有解释如何处理它们。 https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/streaming/event_time.html
最佳答案
默认情况下,当水印超过窗口末尾时,迟到的元素将被丢弃。但是,Flink 允许为窗口操作符指定最大允许延迟。 Allowed lateness 指定元素在被丢弃之前可以延迟多少时间,其默认值为 0。在水印通过窗口末尾之后但在它通过窗口末尾之前到达的元素加上允许的迟到,仍然被添加到窗口中。根据使用的触发器,延迟但未丢弃的元素可能会导致窗口再次触发。 EventTimeTrigger 就是这种情况。
为了使这项工作正常进行,Flink 会保持窗口的状态,直到它们允许的延迟期满。一旦发生这种情况,Flink 将移除窗口并删除其状态。
您可以在此处查看生命周期。 https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/windows.html#window-lifecycle
关于apache-flink - Apache 弗林克 : How are late events handled?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37844871/