Flink窗口window详解(分类、生命周期、窗口分配器、窗口函数、触发器)

一、窗口的分类

时间窗口:滚动(窗口大小)、滑动(窗口大小、滑动步长)、会话(会话超时时间)

计数窗口:滚动、滑动

二、窗口window的四个关键组件

窗口操作一般在keyby之后调用window函数进行计算,因为进行keyby之后,原始的datastream就会分成多条逻辑流,就是keyedStream,基于keyedStream的窗口操作会开启多个并行子任务,即对不同的key分别开启一个并行子任务,各自独立进行窗口计算。

如果没有keyBy而直接进行窗口计算,调用的是windowAll函数,windowAll函数本身是一个非并行的操作,那么即使手动调大了窗口算子并行度也是无济于事的,最终只会在一个task上进行计算,并行度为1。在实际应用中不推荐。

(1)(必要)窗口分配器(window assigner)

定义数据应该被分配到哪个窗口,数据流经过窗口分配器处理后得到的是windowedStream,这个类型并不是datastream, 所以不能直接进行其他转换,必须进一步调用窗口函数,才能再次得到datastream。

时间窗口根据分类可以通过在window方法中传入不同参数定义如下六种窗口分配器:TumblingProcessingTimeWindows、SlidingProcessingTimeWindows、ProcessingTimeSessionWindows、TumblingEventTimeWindows、SlidingEventTimeWindows、EventTimeSessionWindows。

计数窗口直接调用.countWindow()方法,传入一个参数则是滚动,两个则是滑动计数窗口。

(2)(必要)窗口函数(window functions)

定义窗口数据的具体计算逻辑。原**始的datastream经过窗口分配器处理之后的数据类型时windowedStream,它不属于dataStream,需要进一步调用窗口函数才能变成dataStream。**窗口函数基于处理方式的不同,可以分为如下两种:

增量聚合函数(流处理思想) :来一条数据处理一条,但不立即输出计算结果,等窗口到了结束时间需要计算结果的时候,直接将之前的聚合状态输出,提高了程序运行效率和实时性

典型的增量聚合函数有两种:归约函数.reduce((new ReduceFunction))和聚合函数.aggrerate(new AggregateFuntion)。归约函数要求聚合结果类型与原始数据类型一致,适用面更窄。聚合函数可以自定义中间状态累加器,更符合Flink的有状态的流处理思想。

全窗口函数(批处理思想): 先收集窗口中的数据并缓存起来,等到窗口要输出计算结果时再取出全部数据进行计算。全窗口函数再有些场合十分有用 :如要计算分位数,则必须等所有数据到齐才能进行计算。此外,全窗口函数还能输出丰富的上下文信息(如窗口的起始时间)。

在Flink中,全窗口函数可以通过.process(new **ProcessWindowFunction)**来实现。

(3)(可选)触发器(Trigger)

触发器可以控制窗口函数的执行。试想这样一种情况:你要计算一台能的pv,你的窗口大小是一天(0点到24点),但你想要在中间的每一个整点时刻也能看到从当天0点累计到当前整点的pv(0-1,0-2,0-3...),那么就可以使用触发器,在每个整点也触发一次计算并输出计算结果。

对windowedStream类型的数据流调用.trigger()方法,就可以传入一个自定义触发器了。这里就不详述trigger的具体实现了,感兴趣的可以自己查看。

(4)(可选)退出器(Evictor)

在执行窗口函数之前或之后的移除数据的逻辑操作。对windowedStream调用.evictor()方法。

三、窗口的生命周期

(1)窗口的创建

窗口的类型和基本信息由窗口分配器(window assigners)指定,但窗口不会预先创建好,而是数据驱动创建的。当属于这个窗口的第一个元素到来时,就会创建对应的窗口。

(2)窗口计算的触发

窗口函数和触发器都能触发窗口的计算。窗口函数定义了窗口计算的逻辑,触发器则指定了调用窗口函数的条件。

(3)窗口的销毁

默认情况下,当水位线到达了窗口的结束时间,就会触发计算并销毁窗口。当设置了允许迟到数据后,水位线到达窗口的结束时间会触发计算,但窗口不会立即销毁,而是在(窗口结束时间+设置的允许等待的时间)的水位线到来才会销毁窗口。

相关推荐
美林数据Tempodata14 分钟前
“双新”指引,AI驱动:工业数智应用生产性实践创新
大数据·人工智能·物联网·实践中心建设·金基地建设
com_4sapi4 小时前
2025 权威认证头部矩阵系统全景对比发布 双榜单交叉验证
大数据·c语言·人工智能·算法·矩阵·机器人
鲸能云5 小时前
政策解读 | “十五五”能源规划下储能发展路径与鲸能云数字化解决方案
大数据·能源
五度易链-区域产业数字化管理平台6 小时前
五度易链大数据治理实战:从数据孤岛到智能决策
大数据
激动的小非6 小时前
电商数据分析报告
大数据·人工智能·数据分析
ITVV6 小时前
湖仓一体部署
大数据·数据湖·湖仓一体
2501_933509078 小时前
无锡制造企税惠防错指南:知了问账帮守政策红利线
大数据·人工智能·微信小程序
F36_9_8 小时前
如何在沟通不畅导致误解后进行修复
大数据
青云交8 小时前
Java 大视界 -- 基于 Java 的大数据实时数据处理在工业互联网设备协同制造中的应用与挑战
flink·spark·工业互联网·预测性维护·实时数据处理·java 大数据·设备协同制造