Flink流计算编程--Session Window实战

本文详细介绍了Flink中的Session Window,包括概念、分析及实现方式。通过实例展示了Session Window如何根据数据时间间隔定义窗口,并通过代码示例解释了其在Flink中的具体实现和输出结果。
摘要由CSDN通过智能技术生成

1、session window简介

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,有如下几条数据,其自身时间戳如下:

key,10:00:00
key,10:00:03
key,10:00:05
key,10:00:12
key,10:00:15
key,10:00:24
key,10:00:30
key,10:00:42
.....

那么,假设Session Window的时间gap如果是6秒,那么,上面的数据会被分成以下几个窗口(窗口开始时间以及窗口结束时间,窗口内记录数):

窗口1:(key,10:00:00,10:00:11,3)
窗口2:(key,10:00:12,10:00:21,2)
窗口3:(key,10:00:24,10:00:30,1)
窗口4:(key,10:00:30,10:00:42,1)
......

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

2、session window窗口分析

下面我们来分析下上边的数据。
首先,我们设置的时间gap是6秒,那么,当相邻的记录相差>=6秒时,则触发窗口。
对于第一条记录与第二条记录,其时间间隔是3秒,那么这两条记录属于同一个窗口内,此时并不触发窗口;第二条与第三条记录,间隔2秒,也不触发窗口;第三条与第四条记录,间隔>=6秒(7秒),此时,窗口被触发了。
继续,第四条记录与第五条记录间隔3秒,不触发;第五条与第六条间隔9秒,触发;
继续,第六条与第七条间隔6秒,触发;
继续,第七条与第八条间隔12秒,触发。

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

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

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

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

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

3、session window在Flink中的实现

上面的介绍有点繁琐,不够言简意赅,那么我们直接看代码。
数据介绍:在代码之前,介绍下数据,指数数据,正常情况每隔3秒产生一条,如果达到6秒甚至更多实践才产生数据,则认为有gap,此时说明指数的交易不够频繁,不够活跃。

代码如下:

import java.text.SimpleDateFormat

import org.apache.flink.streaming.api.scala._
import DataTypes.StockIndex
import org.apache
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值