如果元素到达违反水印条件,该事件如何处理?被扔掉了吗?或者事件是否仍然传播到下游,过去的窗口函数是用延迟事件重新计算的?
文件承认迟到的事件发生了,但没有解释它们是如何处理的。 https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/streaming/event_time.html
答案 0 :(得分:2)
默认情况下,当水印超过窗口末尾时,会删除延迟元素。但是,Flink允许为窗口运算符指定最大允许延迟。允许延迟指定元素在被删除之前可以延迟多少时间,并且其默认值为0.在水印已经过了窗口结束但在它通过窗口结束加上允许的延迟之后到达的元素,仍然被添加到窗口中。根据所使用的触发器,延迟但未丢弃的元素可能会导致窗口再次触发。这是EventTimeTrigger的情况。
为了使这项工作,Flink保持窗口的状态,直到他们允许的延迟到期。一旦发生这种情况,Flink将删除窗口并删除其状态。
您可以在这里查看生命周期。 https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/windows.html#window-lifecycle
答案 1 :(得分:1)
从Flink 1.0开始,后期元素通过使用" singleton"重新评估窗口函数来处理。仅包含已故事件的窗口。
在Flink的未来版本中,用户可以更好地控制此行为。请参阅flink-dev邮件列表中的以下主题: