window基本知识点
Window窗口
streaming 流式计算是一种被设计用于处理无限数据集的数据处理引擎,而无限数据集是指一种不断增长的本质上无限的数据集, 而 window 是一种切割无限数据为有限块进行处理的手段。
无限切割为有限流的方式,将流数据分发到有限大小的桶中进行分析。
窗口的类型
CountWindow
按照指定的数据条数生成一个 Window, 与时间无关。
TimeWindow
按照时间生成 Window。
对于 TimeWindow,可以根据(窗口实现原理的不同)数据分发到桶的规则不同分成三类:滚动窗口( Tumbling Window)、滑动窗口( Sliding Window) 和会话窗口( Session Window)
滚动窗口(Tumbling Windows)
数据只属于一个窗口。
滑动窗口(Sliding Windows)
数据不只是属于一个窗口,属于多个窗口。
会话窗口(Session Windows)
Window API
窗口分配器 – window() 方法,需要注意的是,KeyedStream里面才有window()方法,因此window()方法的使用,必须在keyby之后,才能使用。
需要注意的是Time这个包,要引用对,streaming api 下面的。注意里面有windowing。
import org.apache.flink.streaming.api.windowing.time.Time
TimeWindow
滚动窗口(Tumbling Windows)
val resultStream = dataStream
.map(data =>(data.id,data.tempreture)) //转换成二元组,求id分组的最小温度,显然时间戳不需要了。
.keyBy(_._1) // 以id进行分组
.timeWindow(Time.seconds(15)) //15s的窗口大小,不滑动,也就是滚动。
//后面可以继续跟着聚合的方法。
滑动窗口(Sliding Windows)
val resultStream = dataStream
.map(data =>(data.id,data.tempreture)) //转换成二元组,求id分组的最小温度,显然时间戳不需要了。
.keyBy(_._1) // 以id进行分组
.timeWindow(Time.seconds(15), Time.seconds(5)) //15s的窗口大小,滚动5s。
//后面可以继续跟着聚合的方法。
会话窗口(Session Windows)
会话窗口的话,只能这么写。没有timewindow(),这种简写的方式。
CountWindow
滚动窗口(Tumbling Windows)
val resultStream = dataStream
.map(data =>(data.id,data.tempreture)) //转换成二元组,求id分组的最小温度,显然时间戳不需要了。
.keyBy(_._1) // 以id进行分组
.countWindow(10)
//后面可以继续跟着聚合的方法。
滑动窗口(Sliding Windows)
val resultStream = dataStream
.map(data