迟到数据是什么
流计算按事件时间开窗时,需要用水位线(watermark)判断「这个窗口的数据大致齐了」。当一条记录的事件时间早于当前水位线,它就被判为迟到数据。迟到本身不是错误:网络抖动、客户端离线补传、上游批任务回灌历史都会造成迟到,关键在于窗口触发之后这些记录还能不能被计入。
基本信息
| 判定 | 记录事件时间早于已发出的水位线 |
|---|---|
| 来源 | 网络抖动、客户端补传、上游批转流 |
| 手段 | 延长水位线、允许迟到窗口、侧输出补偿 |
| 适用引擎 | Flink、Spark Structured Streaming 等事件时间语义引擎 |
| 前提 | 必须显式声明事件时间列与水位线,否则不存在迟到概念 |
策略对照
策略对照
允许迟到(allowed lateness):窗口延迟销毁,迟到数据仍触发更新
侧输出(side output):迟到记录单独落地,离线任务补算
直接丢弃:仅适用于近似监控,对账类指标不可接受三种处理方式对比
| 方式 | 适用 | 代价 |
|---|---|---|
| allowed lateness | 指标允许回改,下游支持更新写 | 窗口状态保留更久,内存与 checkpoint 变大 |
| 侧输出补救 | 需要精确结果但实时性可让步 | 多一条离线补偿链路,要保证补偿幂等 |
| 直接丢弃 | 监控、大屏等近似场景 | 累计值偏低,不能用于对账 |
典型使用场景
- 实时参考链路可接受少量迟到,配置几秒到几分钟的容忍窗口
- 财务对账链路建议以离线批处理为准,实时结果只做预警
- 迟到率要纳入监控指标,突增往往是上游故障或时钟漂移的信号
- 移动端埋点补传场景要按设备时钟校准,避免整批数据被判定为迟到
水位线是「容忍度」也是「延迟」,放宽水位线会同时推迟所有窗口的首次输出;实际调参时要按业务对时效与准确的取舍来定,而不是一律调到最宽。