本篇文章为大家展示了Flink1.10中Window窗口机制简介,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
一、Window概念
上面是Flink1.10的官方文档的一句话,翻译了一下大体意思是:Window是处理无限数据流的核心,Windows将流分割为有限大小的“buckets”,我们可以在上面应用计算。
Flink认为批处理是流处理的一种非常特殊的情况。在流处理中,我们为数据定义滑动窗口或滚动窗口,并且在每次窗口滑动或滚动时生成结果。批处理则不同,我们定义一个全局窗口,所有的记录都属于同一个窗口;Flink 底层引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(window)就是从 Streaming 到 Batch 的一个桥梁。
二、Window分类
1.keyed streams和non-keyed streams
Flink程序在窗口计算之前,先对数据做分流,有两种控制流的方式:第一种是keyed streams;第二种non-keyed streams;
由上图可知,对于keyed streams调用的是keyBy和window,先对数据流根据key进行了分组,经过keyBy的数据流将形成多组数据,下游的算子的多个实例可以并行计算,而non-keyed streams调用的是windowAll,不会对数据流进行分组,所有的数据将发送到下游的单个实例进行处理。两种控制流的原理基本类似,唯一的区别就是发送给下游的多个或单个算子进行计算。
2.Window Assinger
数据经过控制流的处理之后,两种控制流都需要指定一个window Assinger,负责将每个传入的元素分配给一个或多个窗口,有了window Assinger,才会创建出各种形式的window来覆盖我们所需的各种场景,对我们开发来说不需要关注window本身,只需要关注Window Assinger的分类即可,所以很多关于Flink的视频都没有讲解控制流的概念,只讲了Window的分类。
3.Window Assinger分类
Flink为最常见的用例(即滚动窗口、滑动窗口、会话窗口和全局窗口)提供了预定义的Window Assinger程序。您还可以通过扩展Window Assigner类来实现自定义窗口assigner。所有内置的窗口分配程序(全局窗口除外)都根据时间将元素分配给窗口,时间可以是处理时间,也可以是事件时间。
Window 可以是基于时间驱动的(Time Window,例如:每60秒钟),也可以是基于数据驱动的(Count Window,例如:每200个元素)。同时基于不同事件驱动的窗口又可以分成以下几类:滚动窗口 (Tumbling Window, 无重叠)、滑动窗口 (Sliding Window, 有重叠)、会话窗口 (Session Window, 活动间隙)、全局窗口。下面我就结合ApacheFlink官网文档给大家讲解下这四种窗口。
3.1 Tumbling Window(滚动窗口)
滚动窗口将每个元素分配给指定窗口大小的窗口。滚动窗口有一个固定的大小且元素不重叠。例如,如果您指定了一个大小为5分钟的滚动窗口,那么将计算当前窗口并每5分钟启动一个新窗口,如下图所示。
3.2 Sliding Windows(滑动窗口)
滑动窗口分配程序将元素分配给固定长度的窗口。类似于滚动窗口分配程序,窗口的大小由窗口大小参数配置。一个附加的窗口滑动参数控制滑动窗口启动的频率。因此,如果滑动窗口比窗口大小要小,则滑动窗口可以重叠。在这种情况下,元素被分配给多个窗口。例如,您可以有10分钟大小的窗口,它可以滑动5分钟。这样,您每5分钟就会得到一个包含最近10分钟内到达的事件的窗口,如下图所示。
3.3 Session Windows(会话窗口)
会话窗口分配程序根据活动的会话对元素进行分组。与滚动窗口和滑动窗口相比,会话窗口没有重叠,也没有固定的开始和结束时间。相反,当某个会话窗口在一段时间内没有接收到元素时,它就会关闭。当一个不活跃的间隙出现时。会话窗口分配程序可以配置为静态会话间隔,也可以配置为会话间隔提取器函数,该函数定义了不活动期间的长度。当此期间过期时,当前会话将关闭,随后的元素将分配给新会话窗口,如下图所示:
3.4 Global Windows(全局窗口)
全局窗口分配程序将具有相同键的所有元素分配给同一个全局窗口。此窗口模式仅在您还指定自定义触发器时才有用。否则,将不执行任何计算,因为全局窗口没有一个可以处理聚合元素的自然末端,所有相同keyed的元素分配到一个窗口里,这种窗口很少使用,如下图所示:
至此,Flink的Window机制的一些概念介绍完毕。
上述内容就是Flink1.10中Window窗口机制简介,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。