首页/数据/数据工程与 ETL 速查/水位线 Watermark 与乱序容忍
管道基础52 条

水位线 Watermark 与乱序容忍

水位线是事件时间已推进到某一点的标记:引擎收到水位线后才认为更早的数据基本到齐,从而触发窗口计算;允许延迟越大结果越准,输出越晚。

作用界定窗口何时可以触发计算
生成事件时间字段减去固定延迟,也可自定义
单调性水位线只增不减,迟到数据不改变已发出的水位线

Flink SQL 声明水位线

Flink SQL 声明水位线
WATERMARK FOR ts AS ts - INTERVAL '10' SECOND   -- 容忍 10 秒乱序

迟到数据的两种处理

迟到数据的两种处理
1) 允许窗口多等待:加大水位线延迟
2) 丢弃但旁路输出:迟到数据写侧输出流单独分析
水位线延迟调大意味着窗口保持更久、状态更大;要在结果准确性与恢复成本之间取值。

易错点

  • 某个输入分区长期无数据会卡住整体水位线(空闲分区问题),需设置 idle 超时
  • 水位线表达式写成 ts + 延迟会让窗口提前触发,统计结果偏低

数据来源与参考

  • Apache Flink 官方文档:Generating Watermarks
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌