目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

大数据全系列 教程

1869个小节阅读:467.4k

收藏
全部开发者教程

408考研

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(175)
赞(0)

丢弃SideOutput

基于事件时间窗口计算中,如果数据到达时,所在窗口已经触发计算并且销毁,此时可以将迟到数据放到侧边流输出中,单独保存,进行额外处理,解决数据丢失问题。

通过侧边流Side OutputTag保存迟到数据,然后进行单独处理,代码如下所示:

乱序、延迟数据处理方案总结:

  1. 窗口window 的作用是为了周期性的获取数据
  2. watermark作用是防止数据出现乱序(经常),事件时间内获取不到指定的全部数据,做的一种保险方法
  3. allowedLateness是将窗口关闭时间再延迟一段时间
  4. sideOutPut是最后兜底操作,所有迟到数据,指定窗口已经彻底关闭,就会把数据放到侧输出流

情况一:没有设置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,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.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

 

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2