Flink如何处理迟到数据?

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

(1)水位线的延迟

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

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

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

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

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

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

相关推荐
贝多芬也爱敲代码2 小时前
如何减小ES和mysql的同步时间差
大数据·mysql·elasticsearch
异次元的星星3 小时前
智慧新零售时代:施易德系统平衡技术与人力,赋能门店运营
大数据·零售
深思慎考5 小时前
ElasticSearch与Kibana 入门指南(7.x版本)
大数据·elasticsearch·jenkins
银行数字化转型导师坚鹏5 小时前
如何设计优秀的企业微信私域运营实战培训方案
大数据·python·企业微信
悠闲蜗牛�6 小时前
人工智能时代下的全栈开发:整合AI、大数据与云原生的实践策略
大数据·人工智能·云原生
ml魔力信息7 小时前
活体检测与防伪技术的安全与隐私分析
大数据·人工智能·安全·隐私保护·生物识别·活体检测
数据要素X8 小时前
寻梦数据空间 | 架构篇:从概念到落地的技术实践与突破性创新
大数据·运维·数据仓库·微服务·数据治理·数据中台·可信数据空间
IT学长编程9 小时前
计算机毕业设计 基于EChants的海洋气象数据可视化平台设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·hadoop·python·毕业设计·课程设计·毕业论文·海洋气象数据可视化平台
呆呆小金人10 小时前
SQL入门: HAVING用法全解析
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
Elastic 中国社区官方博客11 小时前
如何减少 Elasticsearch 集群中的分片数量
大数据·数据库·elasticsearch·搜索引擎·全文检索