Flink Window 窗口概念和数据处理
Flink的Window操作
Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(window)就是从 Streaming 到 Batch 的一个桥梁。Flink 提供了非常完善的窗口机制。
1. 什么是window
在流处理应用中,数据是连续不断的,因此我们不可能等到所有数据都到了才开始处理。当然我们可以每来一个消息就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们的网页。在这种情况下,我们必须定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据进行计算。
如果在数据流上,截取固定大小的一部分,这部分是可以进行统计的。 截取方式主要有两种:
- 根据
时间进行截取(time-driven-window),比如每1分钟统计一次或每10分钟统计一次。- 根据
消息数量进行截取(data-driven-window),比如每5个数据统计一次或每50个数据统计一次。

2. 时间窗口
1.翻滚窗口(数据以一个时间断为节点不会有重复)

2.滑动窗口(数据在某一个时间段内会有重叠,也就是说数据会重复)

2.时间窗口案例
1.tumbling-time-window (翻滚窗口-无重叠数据)
按照时间来进行窗口划分,每次窗口的滑动距离等于窗口的长度,这样数据不会重复计算,我们参考上面的案例
代码如下:
object StreamingTumblingTimeWindow {
def main(args: Array[String]): Unit = {
//1.创建运行环境
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
//2.定义数据流来源
val textStream = env.socketTextStream("node01", 9999)
//3.转换数据格式,text->CarWc
val data = textStream.map(line => {
val array = line.split(",")
WordCountCart(array(0).toInt, array(1).toInt)
})
//4.执行统计操作,每个sensorId一个tumbling窗口,窗口的大小为5秒
//也就是说,每5秒钟统计一次,在这过去的5秒钟内,各个路口通过红绿灯汽车的数量。
val keyByData: KeyedStream[WordCountCa

本文深入探讨Flink中的窗口处理机制,包括翻滚窗口和滑动窗口的概念及应用场景,对比无重叠与有重叠数据处理的区别,同时提供代码示例说明如何在流处理中运用计数和时间窗口进行数据统计。
最低0.47元/天 解锁文章
4172

被折叠的 条评论
为什么被折叠?



