如果一个元素到达违反水印条件的元素,该事件如何处理?它被扔掉了吗?还是该事件仍在下游传播,过去的窗口功能与后期事件重新计算?
该文档承认发生后期事件,但没有解释它们的处理方式。https://ci.apache.org/projects/flink/flink/flink-docs-release-1.0/apis/streaming/event_time.html
默认情况下,当水印已超过窗口末端时,较晚元素将被删除。但是,Flink允许为窗口操作员指定最大允许的迟到。允许迟到的时间元素在删除之前可以迟到多少时间元素,并且其默认值为0。仍然添加到窗口中。根据所使用的扳机,迟到但未掉落的元素可能会再次发射窗口。事件Timetrigger就是这种情况。
为了进行这项工作,Flink保留了窗户状态,直到其允许的迟到到期为止。一旦发生这种情况,Flink卸下窗口并删除其状态。
您可以在此处检查生命周期。https://ci.apache.org/projects/flink/flink/flink-docs-release-1.3/dev/windows.html#window-lifecycle
从flink 1.0开始,通过使用仅包含晚期事件的" singleton"窗口重新评估窗口函数来处理较晚元素。
在Flink的将来版本中,用户将对此行为有更多控制权。从Flink-Dev邮件列表中查看此线程:
>