欢迎光临散文网 会员登陆 & 注册

Flink中会话窗口是什么?这篇文章讲明白了!

2023-08-09 17:52 作者:ingemar-  | 我要投稿

Flink从1.1开始支持Session window,它是属于基于时间的窗口。

这里以EventTime为例,基于时间的窗口,可以分为3种:

  • TumblingEventTimeWindows

  • SlidingEventTimeWindows

  • EventTimeSessionWindows

对于Tumbling与Sliding窗口,其窗口的时间大小是固定的, 只是滑动的不同,例如10秒钟一个窗口,那么窗口中开始时间和结束时间一定是一个10秒的间隔,例如从10:00:00到10:00:10。Sliding的窗口大小也是固定的,例如每隔10秒钟统计过去20秒的数据,那么它的窗口也是从10:00:00到10:00:20,大小是20秒。

Session window的窗口大小,则是由数据本身决定。例如,基于同一个key,有如下几条数据,其自身时间戳如下:

那么,假设Session Window的时间gap如果是6秒,那么,上面的数据会被分成以下几个窗口

可以看到,session window只需要设置一个时间间隔(gap)即可定义一个session window机制。


session window窗口分析


下面我们来分析下上面的数据。 

首先,我们设置的时间gap是6秒,那么,当相邻的记录相差>=6秒时,则触发窗口

  • 对于第一条记录与第二条记录,其时间间隔是3秒,那么这两条记录属于同一个窗口内,此时并不触发窗口

  • 第二条与第三条记录,间隔2秒,也不触发窗口

  • 第三条与第四条记录,间隔>=6秒(7秒),此时,窗口被触发了

  • 第四条记录与第五条记录间隔3秒,不触发

  • 第五条与第六条间隔9秒,触发

  • 第六条与第七条间隔6秒,触发

  • 第七条与第八条间隔12秒,触发

到此,上边这些数据被划分到不同的窗口中,每个窗口的大小也不一样。

那么,每个窗口的时间范围有没有什么共性?我们可以按照下面的公式来计算每个窗口的时间范围:

窗口大小=[第一条数据的时间,第一个与相邻数据相差大于等于gap的时间+gap)

看似有点难以理解,其实现实的意义就是:窗口内包含的数据是“活跃的”。

例如:用户点击行为,如果认为30秒间隔用户没有操作,则认为是不活跃的。那么通过session window,定义一个30秒的gap,此时,每个窗口内的数据,都是用户在活跃期间的数据,超过30秒了没有任何操作,则认为用户不活跃,有可能下线。


Flink中会话窗口是什么?这篇文章讲明白了!的评论 (共 条)

分享到微博请遵守国家法律