Flink05——一文了解Flink的Window和Time

前言

窗口计算是流式计算中非常常用的数据计算方式之一,通过按照固定时间或长度将 数据流切分成不同的窗口,然后对数据进行相应的聚合运算,从而得到一定时间范围内的统计结果。窗口(Windows)在SparkStreaming Flink中都是非常重要的概念。
例如统计最近5分钟内某基站的呼叫数,此时基站的数据在不断地产生,但是通过5分钟的窗口将数据限定在固定时间范围内,就可以对该范围内的有界数据执行聚合处理,得出最近5分钟的基站的呼叫数量。

window分类

1.Global Window 和 Keyed Window

在运用窗口计算时,Flink根据上游数据集是否为KeyedStream类型,对应的Windows 也会有所不同

  • Keyed Window:上游数据集如果是 KeyedStream 类型,则调用 DataStream API 的 window() 方法,数据会根据 Key 在不同的Task 实例中并行分别计算,最后得出针对每个 Key 统 计的结果。
  • Global Window:如果是 Non-Keyed 类型,则调用 WindowsAll()方法,所有的数据都会在窗口算子中由到一个Task中计算,并得到全局统计结果。

举个例子:

//读取文件数据 
val data = streamEnv.readTextFile(getClass.getResource("/station.log").getPath)   	
  .map(line=>{ 
  	var arr =line.split(",") 
  	new StationLog(arr(0).trim,arr(1).trim,arr(2).trim,arr(3).trim,arr(4).trim.toLong,arr(5).trim.to Long) 
  	}) 
  	//Global Window 
  	data.windowAll (自定义的WindowAssigner) 
  	//Keyed Window 
  	data.keyBy(_.sid) .window(自定义的WindowAssigner)

2.Time Window和Count Window

基于业务数据的方面考虑,Flink 又支持两种类型的窗口,一种是基于时间的窗口叫Time Window。还有一种基于输入数据数量的窗口叫Count Window。

根据不同的业务场景,Time Window 也可以分为三种类型,分别是滚动窗口(Tumbling Window)、滑动窗口(Sliding Window)和会话窗口(Session Window)

1.滚动窗口(Tumbling Window)
滚动窗口是根据固定时间进行切分,且窗口和窗口之间的元素互不重叠。这种类型的窗 口的最大特点是比较简单。只需要指定一个窗口长度(window size)。
在这里插入图片描述

//每隔5秒统计每个基站的日志数量 
data.map(stationLog=>((stationLog.sid,1))) 
	.keyBy(_._1) .timeWindow(Time.seconds(5)) 	
	//.window(TumblingEventTimeWindows.of(Time.seconds(5))) 
	.sum(1) //聚合

2. 滑动窗口(Sliding Window)
滑动窗口也是一种比较常见的窗口类型,其特点是在滚动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值