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

相关推荐
ManageEngineITSM1 天前
把问题“消灭在未来”:IT 资产管理软件与问题管理的深度融合逻辑
大数据·运维·人工智能·itsm·工单系统
智元视界1 天前
从深度学习到自主学习:AI的下一个技术跃迁
大数据·人工智能·深度学习·学习·架构·数字化转型·产业升级
safestar20121 天前
Elasticsearch性能优化实战:从GB到PB级数据的性能演进之路
大数据·elasticsearch·性能优化
Aloudata1 天前
周卫林|大数据通往大模型的钥匙:NoETL to Trusted AI
大数据·人工智能·数据分析·chatbi·data agent
Yuyang_Leo1 天前
Flink的一些面试题整理
大数据·flink
lisw051 天前
社区数据仓库的可持续连接性!
大数据·数据仓库·人工智能·机器学习
一辉ComeOn1 天前
【大数据高并发核心场景实战】缓存层 - 读缓存
大数据·缓存
pale_moonlight1 天前
九、Spark基础环境实战(下)
大数据·javascript·spark
Francek Chen1 天前
Francek Chen 的730天创作纪念日
大数据·人工智能·学习·程序人生·创作纪念日
老蒋新思维1 天前
创客匠人 2025 峰会启示:AI 重构知识变现,从内容输出到资产运营
大数据·人工智能·tcp/ip·重构·创始人ip·创客匠人·知识变现