如果到达的元素违反了 watermark条件,如何处理事件?它被扔掉了吗?或者,事件是否仍在下游传播,并使用延迟事件重新计算过去的窗口函数?
文档承认延迟事件发生,但没有 explain如何处理这些事件。https://ci.apache.org/projects/flink/flink-docs-release-1.0/api/streaming/event_time.html
如果到达的元素违反了 watermark条件,如何处理事件?它被扔掉了吗?或者,事件是否仍在下游传播,并使用延迟事件重新计算过去的窗口函数?
文档承认延迟事件发生,但没有 explain如何处理这些事件。https://ci.apache.org/projects/flink/flink-docs-release-1.0/api/streaming/event_time.html
默认情况下,当 watermark超过窗口末尾时,将删除延迟的元素。但是,Flink允许为窗口操作符指定允许的最大延迟时间。Allowed lateness指定元素在被删除之前可以延迟多长时间,其默认值为0。在 watermark通过窗口末尾之后到达的元素,在它通过窗口末尾加上允许的延迟之前到达的元素仍然被添加到窗口中。 root据所使用的触发器,延迟但未丢弃的元素可能会导致窗口再次触发。EventTimeTrigger就是这样。
为了实现这一点,Flink保持windows的状态,直到其允许的延迟过期。一旦发生这种情况,Flink将删除窗口并删除其状态。
你可以在这里查看生命周期。
从flink1.0开始,后期元素是通过使用一个只包含late事件的“singleton”窗口重新计算窗口函数来处理的。
在Flink的未来版本中,用户将能够更好地控制这种行为。查看flink dev邮件列表中的以下线程:
http://mail archives.apache.org/mod_mbox/flink dev/201604.mbox/%3ccanmxw3_Ew38KyL0q=q70pC03=UD=KaLQ0XmRyTNE77udAsh=w@mail.gmail.com%3E