本文重点
Flink作为一个流式处理框架,最重要的就是要处理好迟到的数据,保证数据的准确性,本文就来系统学习一下FLink框架针对于迟到数据的处理。
方法:
1、设置水位线延迟时间:水位线随着事件时间-延迟时间-1ms
2、设置窗口延迟关闭时间:窗口达到结束时间后先计算一个近似结果,但是窗口不会关闭,每来一条数据,窗口就会再次计算,并且将更新后的结果输出,也就是在这个过程中不断的对结果进行修正。
3、迟到数据侧输出流管理:如果在延迟关闭窗口时间到达之后,数据还没有到达,此时就可以使用侧输出流了。原理就是将之前窗口关闭之后的最终计算结果保存起来,当迟到的数据到达之后,判断迟到数据属于哪个窗口,然后手动对结果进行合并更新,以便保证最终结果的准确性。
窗口关闭之后快速输出一个结果,可以保证实时性,侧输出流可以保证最终准确性,这就是Flink通过一套系统来保证实时性和结果的最终正确性,就是Lambda 架构的体现。
设置水位线延迟时间
设置窗口延迟关闭时间
为窗口算子设置一个允许的最大延迟。在这段时间内,窗口不会销毁,继续到来的数据依然可以进入窗口中并触发计算。直到水位线推进到了窗口结束时间 + 延迟时间,才真正将窗口的内容清空,正式关闭窗口。
API:
stream.keyBy(...).window(TumblingEventTimeWindows.of(Time.hours(1))).allowedLateness(Time.minute
订阅专栏 解锁全文
319

被折叠的 条评论
为什么被折叠?



