Flink如何处理迟到数据?

在flink中进行窗口计算时,由于乱序流数据的问题,往往会出现迟到数据,迟到数据未参与所属窗口的计算会对计算结果的准确性产生影响,对此,Flink有如下三种方法来保障结果的准确性。

(1)水位线的延迟

对于乱序流数据,水位线可以设置延迟 Flink的Watermark水位线详解-CSDN博客,但一般不宜将延迟时间设置的过大,否则流处理的实时性将会大大降低。因此还是会有迟到数据。

(2)窗口允许处理迟到数据

当水位线到达窗口结束时间时,默认窗口会关闭,之后来的数据就会被丢弃了,因此可以延迟窗口的关闭时间 。具体而言:在设置了水位线延迟的基础上,大部分的迟到数据已经能够被正确处理了,因此水位线到达窗口结束时间时,先触发计算,得到一个近似正确的结果,但窗口不会关闭,之后每来一个迟到数据,就再触发窗口计算,不断修正计算结果并输出。这就类似lambda架构。可以通过对windowedStream(对datastream调用window分配窗口后就是windowedStream)调用allowedLateness方法设置等待时间。

(3)迟到数据放入窗口侧输出流

即使有了上述的双重保障,但由于窗口不能一直等待,总会关闭,最终还是可能会有丢失数据,这时候该怎么办呢?Flink还提供了一种解决方法:将窗口关闭之后到来的迟到数据收集到侧输出流,保证数据不丢失。之后获取侧输出流中的数据,判断所属窗口,手动对结果进行更行,保证最终结果一定时正确的。

具体实现时对windowedStream调用sideOutoutLateData()方法,传入一个输出标签OutputTag用来标记是迟到数据流即可。基于窗口处理完成之后的datastream调用getSideOutput方法,传入对应的OutputTag即可获取迟到数据流进行后续处理。

相关推荐
STLearner18 分钟前
WSDM 2026 | 时间序列(Time Series)论文总结【预测,表示学习,因果】
大数据·论文阅读·人工智能·深度学习·学习·机器学习·数据挖掘
亚马逊云开发者2 小时前
【Bedrock AgentCore】AI Agent 回答不一致怎么办?双 Memory 架构实现服务标准化(附完整代码)
大数据·人工智能·架构
大嘴皮猴儿4 小时前
从零开始学商品图翻译:小白也能快速掌握的多语言文字处理与上架技巧
大数据·ide·人工智能·macos·新媒体运营·xcode·自动翻译
雷工笔记4 小时前
《为什么 10 倍增长比 2 倍更容易》读书笔记:反内卷的指数级增长破局法
大数据
captain_AIouo4 小时前
OZON航海引领者Captain AI指引运营新航向
大数据·人工智能·经验分享·aigc
K3v5 小时前
【git】删除本地以及远端已经合并到master的分支
大数据·git·elasticsearch
53AI6 小时前
智能调度赋能交通行业:从经验驱动到数据智能的跨越
大数据·人工智能·知识库·智能调度·53ai
黎阳之光7 小时前
黎阳之光核工厂202应急管控平台|全域实景孪生,筑牢核安全最后一道防线
大数据·人工智能·算法·安全·数字孪生
roman_日积跬步-终至千里7 小时前
【系统架构设计师-综合题-知识点(1)】系统工程与信息技术基础
大数据
Elastic 中国社区官方博客8 小时前
Elasticsearch:快速近似 ES|QL - 第二部分
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索