大数据培训|Flink各种窗口区别

Window是处理无限流的核心。Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层引擎是一个流式引擎,在上面实现了流处理和批处理。Flink提供了非常完美的窗口机制,这是Flink最大的亮点之一。接下来带大家了解Flink中各种Flink Window的区别。

一、什么是 Window

在流处理应用中,数据是连续不断的,因此我们不可能等到所有数据都到了才开始处理。当然我们可以每来一个消息就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们的网页。在这种情况下,我们必须定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据进行计算。

窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。一种经典的窗口分类可以分成:翻滚窗口(Tumbling Window,无重叠),滚动窗口(Sliding Window,有重叠),和会话窗口(Session Window,活动间隙)。

二、Keyed 和 Non-Keyed Windows

首先必须要在定义窗口前确定的是你的 stream 是 keyed 还是 non-keyed。keyBy(…)会将你的无界 stream 分割为逻辑上的 keyed stream。如果 keyBy(…)没有被调用,你的 stream 就不是 keyed。

对于 keyed stream,使用 keyed stream 允许你的窗口计算由多个 task 并行,因为每个逻辑上的 keyed stream 都可以被单独处理。属于同一个 key 的元素会被发送到同一个 task。

对于 non-keyed stream,原始的 stream 不会被分割为多个逻辑上的 stream,所以所有的窗口计算会被同一个 task 完成,也就是 parallelism 为1。

三、Flink中的四种窗口

指定了你stream 是否为 keyed 之后,下一步就是定义 window assigner。Flink 为最常用的情况提供了一些定义好的 window assigner,也就是 tumbling windows、 sliding windows、 session windows 和 global windows。以下会介绍这四种窗口的定义。

1.滚动窗口

滚动窗口的 assigner 分发元素到指定大小的窗口。滚动窗口的大小是固定的,且各自范围之间不重叠。比如说,如果你指定了滚动窗口的大小为5 分钟,那么每5 分钟就会有一个窗口被计算,且一个新的窗口被创建。

2.滑动窗口

与滚动窗口类似,滑动窗口会分发元素到指定大小的窗口,窗口大小通过 window size 参数设置。滑动窗口需要一个额外的滑动距离(window slide)参数来控制生成新窗口的频率。因此,如果 slide 小于窗口大小,滑动窗口可以允许窗口重叠。这种情况下,一个元素可能会被分发到多个窗口。

比如说,你设置了大小为10分钟,滑动距离5 分钟的窗口,你会在每5 分钟得到一个新的窗口,里面包含之前10分钟到达的数据(如下图所示)。

3.会话窗口

会话窗口会把数据按活跃的会话分组。与滚动窗口和滑动窗口不同,会话窗口不会相互重叠,且没有固定的开始或结束时间。会话窗口在一段时间没有收到数据之后会关闭,即在一段不活跃的间隔之后。会话窗口的 assigner 可以设置固定的会话间隔(session gap)或用 session gap extractor 函数来动态地定义多长时间算作不活跃。当超出了不活跃的时间段,当前的会话就会关闭,并且将接下来的数据分发到新的会话窗口。

4.全局窗口

全局窗口的 assigner 将拥有相同 key 的所有数据分发到一个全局窗口。这样的窗口模式仅在你指定了自定义的 trigger 时有用。否则,计算不会发生,因为全局窗口没有天然的终点去触发其中积累的数据。

四、总结

Flink窗口是一种数据处理模型,用来处理时间序列数据。它可以将无限的数据流按照一定的规则划分为多个窗口,每个窗口中包含了一段时间内的数据元素。Flink窗口可以根据时间戳或事件顺序来分配数据元素,并在每个窗口中执行相同的操作,以满足特定的业务需求。

回顾一下Flink四种窗口的区别:

滚动窗口:大小固定,范围不重叠。

滑动窗口:大小固定,范围会重叠。

会话窗口:元素相隔session gap会新开窗口。

全局窗口:没有计算终点,自定义触发器时使用。

    THE END
    喜欢就支持一下吧
    点赞9 分享
    评论 抢沙发
    头像
    欢迎您留下宝贵的见解!
    提交
    头像

    昵称

    取消
    昵称表情代码图片

      暂无评论内容