Flink学习(3)——Window(窗口机制)API

本文介绍了Flink中的窗口机制,包括时间窗口(滚动与滑动)、计数窗口(滚动与滑动),以及如何使用window()、windowAll()、timeWindow()和countWindow()等API进行数据开窗和计算。重点讲解了窗口函数的分类:增量聚合与全窗口处理,并演示了实例代码。
摘要由CSDN通过智能技术生成

1. Window的概念

无论是无界的数据流还是有界的,Flink都可以做到接收一个数据就立即处理一个数据,最终我们可以得到整个数据流的所有数据的统计结果。

但是,一般来说更多的,我们希望得到的是统计某个区间、或者某个时间段内的数据结果,比如每天的商品销量、每天的网站点击量,这种情况下,我们就需要Flink中的窗口机制Window API来实现。

Window,Flink中的窗口机制,我的简单理解就是:该机制可以将一个数据流中的数据按照一定规则进行切割,分割为一段一段的数据,然后将这些一段一段的数据分发在各自的桶(bucket)中进行分析计算,进而得到一个区间内的统计数据结果。

window机制并不是让Flink变成了批处理,每个桶内的还是每来一条数据就计算一次。

2. Window的类型

2.1 时间窗口(Time Window)

1. 滚动时间窗口(Tumbling Windows)

将数据依据固定的窗口长度对数据进行切分,而且时间对齐,窗口长度固定,窗口之间没有重叠。针对不同的时间语义(即ProcessingTime和EventTime),Flink提供了TumblingProcessingTimeWindows和TumblingEventTimeWindows等常用窗口定义类。

2. 滑动时间窗口(Sliding Windows)

滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成,窗口长度固定,可以有重叠。

简单理解就是:当我们定义了第一个窗口的左边界位置的时候,将第一个窗口的左边界向右滑动我们指定的滑动间隔(距离),就是第二个滑动窗口的左边界,同理再向右滑动一次,就是第三个窗口的左边界。

如果创建滑动窗口时,指定的滑动间隔与窗口长度相同,那此时其实就相当于滚动窗口。针对不同的时间语义(即ProcessingTime和EventTime),Flink提供了SlidingProcessingTimeWindows和SlidingEventTimeWindows等常用窗口定义类。

3. 会话窗口(Session Windows)

会话窗口比较特殊,其没有固定的窗口长度,而是是有固定的窗口间隙,或者说timeout,简单来讲就是如果一个窗口在timeout时间之内没有收到数据(这里的时间取决于你使用的是EventTime还是ProcessTime),那么就会关闭当前窗口,开启下一个窗口。针对不同的时间语义(即ProcessingTime和EventTime),Flink提供了ProcessingTimeSessionWindows和EventTimeSessionWindows等常用窗口定义类。

4.

2.2 计数窗口(Count Window)

1. 滚动计数窗口

滚动计数,按照数据个数进行划分,滚动的定义与上面相同。

 

2. 滑动计数窗口

按照数据个数进行划分,滑动的定义与上面相同。

3. API使用

3.1 数据开窗

flink中对数据流开窗处理有以下几个方法

(1)window():基本的开窗方法,此方法的调用必须在keyBy操作执行之后,时间窗和计数窗口都可以通过此方法开启。

(2)windowAll():此方法的调用不需要keyBy操作,windowAll方法直接开窗,不进行数据分区,相当于对当前整个数据流进行开窗,屏蔽了flink的并行运行,所以该方法而非必要情况下不要使用。

(3)timeWindow():开启时间窗口,是window方法的简写。

(4)countWindow():开启计数窗口,是window方法的简写。

public class WindowApiTes
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值