其他分享
首页 > 其他分享> > 彻底搞清Flink中的Window机制

彻底搞清Flink中的Window机制

作者:互联网

在这里插入图片描述
窗口

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

Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(window)就是从 Streaming 到 Batch 的一个桥梁。

一个Window代表有限对象的集合。一个窗口有一个最大的时间戳,该时间戳意味着在其代表的某时间点——所有应该进入这个窗口的元素都已经到达
Window就是用来对一个无限的流设置一个有限的集合,在有界的数据集上进行操作的一种机制。window又可以分为基于时间(Time-based)的window以及基于数量(Count-based)的window。
Flink DataStream API提供了Time和Count的window,同时增加了基于Session的window。同时,由于某些特殊的需要,DataStream API也提供了定制化的window操作,供用户自定义window。

窗口的组成
窗口分配器

assignWindows将某个带有时间戳timestamp的元素element分配给一个或多个窗口,并返回窗口集合
getDefaultTrigger 返回跟WindowAssigner关联的默认触发器
getWindowSerializer返回WindowAssigner分配的窗口的序列化器
    窗口分配器定义如何将数据元分配给窗口。这是通过WindowAssigner 在window(...)(对于被Keys化流)或windowAll()(对于非被Keys化流)调用中指定您的选择来完成的。 
WindowAssigner负责将每个传入数据元分配给一个或多个窗口。Flink带有预定义的窗口分配器,用于最常见的用例
即翻滚窗口, 滑动窗口,会话窗口和全局窗口。
您还可以通过扩展WindowAssigner类来实现自定义窗口分配器。
所有内置窗口分配器(全局窗口除外)都根据时间为窗口分配数据元,这可以是处理时间或事件时间。

更多请见:http://www.mark-to-win.com/tutorial/52263.html

标签:窗口,Flink,Window,window,WindowAssigner,分配器,数据,搞清
来源: https://blog.csdn.net/weixin_44519496/article/details/121030278