Flink中Window详解之Window分类

网友投稿 274 2022-11-17

Flink中Window详解之Window分类

Windows 计算是流式计算中非常常用的数据计算方式之一,通过按照固定时间或长度将 数据流切分成不同的窗口,然后对数据进行相应的聚合运算,从而得到一定时间范围内的统 计结果。例如统计最近 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 3.Time Window(时间窗口) 根据不同的业务场景,Time Window 也可以分为三种类型,分别是滚动窗口(Tumbling Window)、滑动窗口(Sliding Window)和会话窗口(Session Window)

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

其中时间间隔可以是 Time.milliseconds(x)、Time.seconds(x)或 Time.minutes(x)。

//每隔3秒计算最近5秒内,每个基站的日志数量 data.map(stationLog=>((stationLog.sid,1))) .keyBy(_._1) .timeWindow(Time.seconds(5),Time.seconds(3)) .window(SlidingEventTimeWindows.of(Time.seconds(5),Time.seconds(3))) .sum(1)

//3秒内如果没有数据进入,则计算每个基站的日志数量 data.map(stationLog=>((stationLog.sid,1))) .keyBy(_._1) .window(EventTimeSessionWindows.withGap(Time.seconds(3))) .sum(1)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Flink中State管理与恢复之Savepint案例
下一篇:应广单片机系列——用I2C接口读写EEPROM
相关文章

 发表评论

暂时没有评论,来抢沙发吧~