40、Flink 的窗口延迟数据处理(Allowed Lateness)详解

Allowed Lateness
a)概述

在使用 event-time 窗口时,数据可能会迟到,即 Flink 用来追踪 event-time 进展的 watermark 已经越过了窗口结束的 timestamp 后,数据才到达。

默认,watermark 一旦越过窗口结束的 timestamp,迟到的数据就会被直接丢弃;但是 Flink 允许指定窗口算子最大的 allowed lateness ,Allowed lateness 定义了一个元素可以在迟到多长时间的情况下不被丢弃,这个参数默认是 0,在 watermark 超过窗口末端、到达窗口末端加上 allowed lateness 之前的这段时间内到达的元素,依旧会被加入窗口;取决于窗口的 trigger,一个迟到但没有被丢弃的元素可能会再次触发窗口,比如 EventTimeTrigger

为了实现这个功能,Flink 会将窗口状态保存到 allowed lateness 超时才会将窗口及其状态删除 。

默认,allowed lateness 被设为 0,即 watermark 之后到达的元素会被丢弃。

复制代码
DataStream<T> input = ...;

input
    .keyBy(<key selector>)
    .window(<window assigner>)
    .allowedLateness(<time>)
    .<windowed transformation>(<window function>);

使用 GlobalWindows 时,没有数据会被视作迟到,因为全局窗口的结束 timestamp 是 Long.MAX_VALUE

b)从旁路输出(side output)获取迟到数据

通过 Flink 的 旁路输出 功能,可以获得迟到数据的数据流。

首先,需要在开窗后的 stream 上使用 sideOutputLateData(OutputTag) 表明需要获取迟到数据;然后,就可以从窗口操作的结果中获取旁路输出流了。

复制代码
final OutputTag<T> lateOutputTag = new OutputTag<T>("late-data"){};

DataStream<T> input = ...;

SingleOutputStreamOperator<T> result = input
    .keyBy(<key selector>)
    .window(<window assigner>)
    .allowedLateness(<time>)
    .sideOutputLateData(lateOutputTag)
    .<windowed transformation>(<window function>);

DataStream<T> lateStream = result.getSideOutput(lateOutputTag);
c)注意

当指定了大于 0 的 allowed lateness 时,窗口本身以及其中的内容仍会在 watermark 越过窗口末端后保留。 这时,如果一个迟到但未被丢弃的数据到达,它可能会再次触发这个窗口,这种触发被称作 late firing,与表示第一次触发窗口的 main firing 相区别。

如果是使用会话窗口的情况,late firing 可能会进一步合并已有的窗口,因为他们可能会连接现有的、未被合并的窗口。

late firing 发出的元素应该被视作对之前计算结果的更新,即你的数据流中会包含一个相同计算任务的多个结果,应用需要考虑到这些重复的结果,或去除重复的部分。

相关推荐
小荟荟几秒前
全国数据资产新闻和报纸摘要联播 2026年3月22日 第25期
大数据·人工智能·数据挖掘
雷焰财经6 分钟前
首都在线MaaS平台:打造企业级AI中枢,驱动游戏产业智变
大数据·人工智能·游戏
码农小白AI16 分钟前
IA-Lab AI 检测报告生成助手:新能源汽车检测报告智能生成与审核新路径,全面适配动力电池标准体系
大数据·人工智能·汽车
编程牛马姐27 分钟前
2026年Pinterest矩阵运营全攻略
大数据·人工智能
ws20190727 分钟前
技术赋能,机遇共生:AUTO TECH China 2026广州汽车零部件展解码产业新未来
大数据·人工智能·科技·汽车
山茶花.30 分钟前
Accio Work 全面解析:从免费白嫖到2000积分时代
大数据·人工智能
fire-flyer40 分钟前
ClickHouse系列(五):ClickHouse 写入链路全解析(Insert 到 Merge)
大数据·clickhouse·架构
leijiwen1 小时前
BDCM(比干数商模型):打造 Web4.0 会员数商模型,帮企业进入数字商业文明,重构实体经济
大数据·人工智能·重构
Fang_YuanAI1 小时前
AI正在重构电商行业
大数据·人工智能·ai·重构·aigc·教育电商·电商
测试开发Kevin1 小时前
Pandas 2.x核心技术—— Apache Arrow 高性能数据处理的基石
大数据·pandas