解决方案:
- Watermark : 防止数据乱序 / 指定时间内获取不到全部数据。
- allowLateNess:将窗口关闭时间再延迟一段时间。
- sideOutPut :当指定窗口已经彻底关闭后,就会把所有过期延迟数据放到侧输出流,让用户决定如何处理(最后兜底的操作)。
迟到事件处理:
1重新激活已经关闭的窗口并重新计算以修正结果(Allowed Lateness)。
2将迟到事件收集起来另外处理(Side Output)。
3将迟到事件视为错误消息并丢弃(flink默认)。
Side Output机制:
将迟到事件单独放入一个数据流分支,这会作为 window 计算结果的副产品,以便用户获取并对其进行特殊处理。
Allowed Lateness机制:
允许用户设置一个允许的最大迟到时长。Flink 会在窗口关闭后一直保存窗口的状态直至超过允许迟到时长,这期间的迟到事件不会被丢弃,而是默认会触发窗口重新计算。
第四章 flink特性 - 流计算乱序延迟数据问题(Watermark) - 简书