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)窗口的销毁

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

相关推荐
Q一件事8 分钟前
防风固沙服务真的能沿直线“送达”北京吗?——对一项区域关联度研究的思考
大数据·人工智能
金立基包装胶水14 分钟前
纸袋热封胶除了粘不牢,还有哪些隐性问题?
大数据·笔记·其他
風穆33 分钟前
云价比对,一屏定音
大数据·云服务器·oopsvps
Capricorn19881 小时前
科研智能体出现召回率低与数据覆盖冲突怎么排查?知芽 Notebook Skill 机制拆解
大数据·论文阅读·人工智能·笔记
精益数智工坊1 小时前
指标管理系统价值怎么释放?指标管理系统运营怎么做?
大数据·人工智能·数据挖掘·数据可视化
IT研究室1 小时前
最新大数据毕业设计选题推荐-基于大数据的黄金价格历史数据分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·数据分析·课程设计
云器科技1 小时前
云器科技担任 CCSA TC601 WG15 副组长单位,参与推进 AI 时代语义基础设施标准化
大数据·人工智能
腾视科技-AI1 小时前
腾视科技AI大模型应用:提效、破局与落地,重塑智能新生态
大数据·人工智能·科技·大模型·ai大模型·腾视科技·ai算力盒
BYSJMG2 小时前
计算机毕设选题|基于大数据与文本挖掘的自动驾驶事故成因分析及可视化研究|Hadoop+PySpark+Django+Vue
大数据·hadoop·信息可视化·django·自动驾驶·kmeans·课程设计
IT研究室2 小时前
最新大数据毕业设计选题推荐-基于大数据的京东商品销售分析与可视化的设计与实现-大数据-Spark-Hadoop-Bigdata
大数据·spark·课程设计