在上一篇文章中,我们探讨了flink的时间概念。本文将深入研究flink中的窗口(window)和水位线(watermark)。
窗口(Window)
窗口是处理无界流数据的关键,Flink将无界流分割成多个窗口,并对其生命周期进行了定义:
一个窗口在其第一个元素进入时被创建,当时间(事件时间或处理时间)超过其结束时间加上用户允许的延迟时间后,该窗口被移除。
Flink官方将窗口分为滚动窗口(Tumbling Windows)、滑动窗口(Sliding Windows)、会话窗口(Session Windows)和全局窗口(Global Windows)。全局窗口是一种特殊类型的窗口,不在本文讨论范围内。
滚动窗口:滚动窗口分派器将数据元素分配给指定大小的窗口,滚动窗口尺寸固定且不会重叠。
滑动窗口:滑动窗口分派器将元素分配给固定长度的窗口。与滚动窗口分派器类似,窗口大小可通过参数配置。还有另一个参数控制滑动窗口的启动频率。因此,如果滑动窗口小于窗口大小,滑动窗口可以重叠。在这种情况下,元素会被分配到多个窗口。如果滑动窗口大于窗口大小,则窗口变成抽样数据。
会话窗口:会话窗口分派器按活动会话对元素进行分组。与滚动窗口和滑动窗口相比,会话窗口不重叠,也没有固定的开始和结束时间。当会话窗口在一段时间内不接收元素时(即,当出现不活动间隙时),它将关闭。
下图是我认为描述窗口最为清晰的一张图。
这张图需要从下往上看,最下面定义了原始数据的输入流,即第一分钟进入2个数据96,第二分钟进入848,以此类推。
倒数第二行是一个固定时间的滚动窗口,其窗口大小为1分钟。
倒数第三行是一个滑动窗口,需要数据滑动窗口的窗口尺寸和滑动尺寸。
倒数第四行是一个固定元素个数的滚动窗口,即每3个元素一滚。
最上面则是一个会话窗口,只要会话有间隙,就会重新构建窗口。
水位线(Watermark)
通过上面的内容,我们可以看出每个窗口都有开始时间和结束时间(一般window的时间窗口为左闭右开的区间范围),在这段时间内,我们是否能拿到所有需要处理的数据,我们就需要水位线来配合了。在之前的文章中,由于理解的原因,我推荐过大家使用翻译水印,但现在,我觉得还是叫水位线更合适一些。
这里引用一段描述:
从上文中,我们可以得出两个触发水位线的必要条件:
水位线时间 >= 窗口的结束时间 在窗口的时间范围(左闭右开)内有数据那么,Flink是如何避免数据乱流的呢?我们来看下面一张图:
这是一个典型的单通道的场景,首先我们有一个时间事件队列{2,3,1,7,3,5,9,6,12},两个水位线(W4,W9)事件通过时间戳被指派给了窗口(T1-T4)。
数据流入2,3,1进入窗口,7不属于当前事件窗口,所以被指派给了新窗口(T4-T8)。
数据继续流入,此时水位线到达W4,触发窗口(T1-T4)计算。
数据继续流入,9被指派给了新窗口(T9-T12)(笔者注,这个图的事件窗口不对,个人认为是T8-T12)
关于多通道的场景,我也推荐云栖的这张图,比官方文档里的要好理解一些,配合上面的案例,相信大家也能读懂。
现在我们已经了解水位线是如何工作的,那么它是如何产生的呢?在Flink里主要有两种方式产生水位线,即周期性的(Periodic)和标记性的(Punctuated)。
Punctuated:数据流中每一个递增的EventTime都会产生一个Watermark。在实际的生产中,Punctuated方式在TPS很高的场景下会产生大量的Watermark,在一定程度上对下游算子造成压力,所以只有在实时性要求非常高的场景才会选择Punctuated的方式进行Watermark的生成。
Periodic:周期性的(一定时间间隔或者达到一定的记录条数)产生一个Watermark。在实际的生产中,Periodic的方式必须结合时间和积累条数两个维度继续周期性产生Watermark,否则在极端情况下会有很大的延时。
因此,水位线的生成方式需要根据业务场景的不同进行不同的选择。
好了,关于窗口和水位线就暂时说到这了,仅代表个人理解,如有问题,望指正,欢迎转载,著名出处。
后续,会整理一些DEMO与大家分享。
参考资料:
https://www.php.cn/link/e4af65db2a5a17afca8bf5cc475fed0b
https://www.php.cn/link/845ae5f86e478f372a410a0fc2db1d82
https://www.php.cn/link/1700002d4c70cbf14d54658d280cb88e
https://www.php.cn/link/75d52237743d661f8f60a988e9ba5989
以上就是零基础学Flink:Window & Watermark的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号