Flink 1.11.1升级至1.14.0 EventTimeSessionWindows行为变更咨询
Flink 1.11到1.14 EventTime会话窗口行为变更解答
核心结论
你观测到的行为属于Flink版本迭代中的预期内优化,没有关联你提到的两个JIRA修复,是1.12版本开始针对有限流场景新增的默认特性。
具体原因
- 1.11及更早版本中,有限事件流(比如你测试用的
fromCollection加载固定数据集)处理完全部数据后,不会主动推进水印到最大值,因此KEY_2对应的会话窗口结束时间为101+10=111秒,没有后续数据推进水印到该阈值,窗口永远不会触发关闭。 - 1.12及之后版本,Flink新增了有限流结束自动注入
Long.MAX_VALUE全局最大水印的逻辑,该水印会超过所有现有窗口的结束时间,触发所有未关闭的事件时间窗口执行计算、输出结果并销毁,避免有限流作业结束时出现数据遗漏。
为什么ProcessingTime会话窗口无此变更
ProcessingTime窗口的触发完全依赖本地系统时间的调度,和水印机制无关。你的测试作业运行时长远远小于10秒的会话超时时间,所以不会触发窗口关闭,和版本特性无关。
适配方案
- 若你的生产环境是实时无限流,该特性不会对线上逻辑产生任何影响,因为无限流永远不会触发「流处理结束」的信号,不会自动注入最大水印。
- 若需要兼容旧版本的单元测试逻辑,可以改用Flink窗口测试工具
WindowTestHarness手动控制水印的推进,替代fromCollection的有限流测试方案,避免自动注入最大水印的干扰。
内容的提问来源于stack exchange,提问作者Jai Patel
相关产品推荐
相关产品推荐

