在 Flink 中处理长达数小时甚至数天的极端迟到数据,同时要求“窗口不能等太久(保证实时性)”且“不能丢数据(保证准确性)”,是一个经典的流处理架构难题。 如果仅仅依赖 Flink 的内置窗口状态来容忍数天的迟到,会导致 State 爆炸,进而引发 Checkpoint 超时、内存溢出或极差的性能。 为了完美解决这个问题,我会采用“多级防御 + 外部存储聚合”的组合机制。具体方案如下: 核心解法:Watermark + Allowed Lateness + Side Output + 外部 Upsert 存储/数据湖 我会将处理流程分为四个层级,逐步剥离不同程度的迟到数据,既释放 Flink 的 State 压力,又保证数据的最终一致性。 第一级:Watermark(处理轻微乱序,保证准实时触发) 机制:设置一个较短的容忍时间(例如 5秒 1分钟),生成 Watermark。 作用:当 Watermark 越过窗口结束时间时,窗口第一次触发计算并输出结果。 收益:满足业务“不能让窗口等太久”的要求,绝大多数按时或轻微网络延迟的数据能迅速得到计算和反馈。 第二级:Allowed ...