flink窗口分组数据错乱
文章目录
- 问题
- 目标
- 解决问题-方案1
- 使用事件时间
- 迟到时间
- 输出幂等
- 解决问题-方案2
问题
正常的flink 作业运行,带窗口的运行,因为上游业务的影响,导致业务恢复后,积累的kafka 数据瞬时涌到flink 程序里,flink 窗口分钟的,导致这一分钟的值非常大。在折线图上展示出来 ,一眼就会发现问题。
目标
即使发生数据累积,也要按事件发生时间,把数据分到应到的窗口里。
解决问题-方案1
要解决上面这个问题,要从三个方面来处理
使用事件时间
也就是窗口TumblingEventTimeWindows,要用这种才按实际的事件时间去分窗口
迟到时间
其实主要是,allowedLateness(Duration.ofMinutes(1)),对于flink 程序来说,其实积累的元素就相当于迟到的元素,只有这个allowedLateness 时间够长,那迟到的元素就能再次触发窗口的计算
输出幂等
如果之前的窗口已经输出,那如果再输出的话就要下游支持幂等操作
解决问题-方案2
直接通过旁路输出把迟到元素输出,然后可以通过离线操作,或者手工把数据补全。