大数据全系列 教程
1869个小节阅读:467.5k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
基于事件时间窗口计算中,如果数据到达时,所在窗口已经触发计算并且销毁,此时可以将迟到数据放到侧边流输出中,单独保存,进行额外处理,解决数据丢失问题。
通过侧边流Side OutputTag保存迟到数据,然后进行单独处理,代码如下所示:
乱序、延迟数据处理方案总结:
情况一:没有设置Watermark,也没有设置allowedlateness,窗口达到触发计算条件,直接计算数据输出并且销毁窗口。将后续乱序数据放到侧边流输出
[root@node3 ~]# nc -lk 8888 sid_1,success,2030-12-01 10:10:01,1 sid_1,success,2030-12-01 10:10:03,1 sid_1,success,2030-12-01 10:10:05,1
result:> window:[2030-12-01 10:10:00--2030-12-01 10:10:05]-<sid_1>--总时长:2
sid_1,success,2030-12-01 10:10:04,1
late-data:> sid_1,success,2030-12-01 10:10:04,1
sid_1,success,2030-12-01 10:10:09,1 sid_1,success,2030-12-01 10:10:10,1
result:> window:[2030-12-01 10:10:05--2030-12-01 10:10:10]-<sid_1>--总时长:2
sid_1,success,2030-12-01 10:10:08,1
late-data:> sid_1,success,2030-12-01 10:10:08,1
代码见:com.itbaizhan.flink.scala.time.EventTimeWindowLateSideDemo
情况二:设置Watermark后,没有设置allowedlateness,窗口达到触发计算条件,计算数据并且输出和销毁窗口。解决数据乱序问题,但是依然有窗口迟到数据,可以将其放到侧边流输出。
[root@node3 ~]# nc -lk 8888 sid_1,success,2030-12-01 10:10:01,1 sid_1,success,2030-12-01 10:10:05,1 sid_1,success,2030-12-01 10:10:04.888,1
sid_1,success,2030-12-01 10:10:08,1result:> window:[2030-12-01 10:10:00--2030-12-01 10:10:05]-<sid_1>--总时长:2
sid_1,success,2030-12-01 10:10:04.999,1
late-data:> sid_1,success,2030-12-01 10:10:04,1
sid_1,success,2030-12-01 10:10:10,1 sid_1,success,2030-12-01 10:10:13,1
result:> window:[2030-12-01 10:10:05--2030-12-01 10:10:10]-<sid_1>--总时长:2
代码见:com.itbaizhan.flink.scala.time.EventTimeWindowWaterLateSideDemo
情况三:设置watemark和allowedlateness后,窗口数据计算并且销毁。解决乱序数据和迟到数据,但是仍然有迟到很久很久数据到达,也是可以将其放到侧边流输出
sid_1,success,2030-12-01 10:10:01,1 sid_1,success,2030-12-01 10:10:05,1 sid_1,success,2030-12-01 10:10:07,1 sid_1,success,2030-12-01 10:10:08,1 // 08-3>=05 第一次触发窗口计算
window:[2030-12-01 10:10:00--2030-12-01 10:10:05]-<sid_1>--总时长:1
sid_1,success,2030-12-01 10:10:04.567,1 //04.567<05&&04.567<05+3+2触发计算
window:[2030-12-01 10:10:00--2030-12-01 10:10:05]-<sid_1>--总时长:2
sid_1,success,2030-12-01 10:10:09,1 sid_1,success,2030-12-01 10:10:04.888,1 //04.567<05&&04.567<05+3+2触发计算
window:[2030-12-01 10:10:00--2030-12-01 10:10:05]-<sid_1>--总时长:3
sid_1,success,2030-12-01 10:10:10,1 //3+2之后的数据放到侧边流 sid_1,success,2030-12-01 10:10:04.999,1
late-data:> sid_1,success,2030-12-01 10:10:04,1
代码见:com.itbaizhan.flink.scala.time.EventTimeWindowWaterAllowedLateSideDemo