赞
踩
对Flink还没有了解的小伙伴们可以参考我的前几期博客
窗口通常指的是建筑物中用来采光和通风的构件,即窗户。这是“窗口”一词最直接和常见的含义。
特定场所应用:在一些特定的公共场所,如售票处、挂号室等,墙上会开有窗形的口子,这些口子有活扇可以开关,用于提供服务,也被称为“窗口”。
Windows是Flink处理无限流的核心。Windows将流拆分为有限大小的“桶”(buckets),我们可以在其上应用计算。
flink支持两种划分窗口的方式(time和count) 根据时间划分窗口,那么它就是一个time-window 如果根据数据划分窗口,那么它就是一个count-window。
就会形成tumbling-window(无重叠数据)。
如下图
形成sliding-window(有重叠数据)。
如下图
会有部分数据会丢失。
根据有无重叠数据,和time||count,我们可以将窗口分为四种类型
会话窗口分配器按活动会话对元素进行分组。与翻转窗口和滑动窗口相比,会话窗口不重叠,也没有固定的开始和结束时间。相反,当会话窗口在一段时间内没有接收到元素时,即出现不活动间隙时,会话窗口会关闭。会话窗口分配器可以配置静态会话间隙或会话间隙提取器功能,该功能定义了不活动的时间段。当此时间段到期时,当前会话关闭,后续元素被分配给新的会话窗口。
对于键值流,首先需要通过keyBy(...)方法指定键,然后才能应用窗口化。窗口化操作通过window(...)方法实现,并且可以附加可选的触发器(Trigger)、逐出器(Evictor)、延迟数据处理策略(Allowed Lateness)以及侧输出标签(Side Output Tag)等。最后,通过reduce/aggregate/apply()方法指定在每个窗口上执行的函数。
- stream
- .keyBy(...) // 指定键
- .window(...) // 应用窗口化
- [.trigger(...)] // 可选:指定触发器
- [.evictor(...)] // 可选:指定逐出器
- [.allowedLateness(...)] // 可选:指定允许的延迟时间
- [.sideOutputLateData(...)] // 可选:指定延迟数据的侧输出标签
- .reduce/aggregate/apply(...) // 指定窗口函数
- [.getSideOutput(...)] // 可选:获取侧输出
对于非键值流,不需要指定键,而是直接使用windowAll(...)方法应用窗口化。其余部分与键值流类似,包括可选的触发器、逐出器、延迟数据处理策略和侧输出标签,以及必须的窗口函数。
- stream
- .windowAll(...) // 应用窗口化
- [.trigger(...)] // 可选:指定触发器
- [.evictor(...)] // 可选:指定逐出器
- [.allowedLateness(...)] // 可选:指定允许的延迟时间
- [.sideOutputLateData(...)] // 可选:指定延迟数据的侧输出标签
- .reduce/aggregate/apply(...) // 指定窗口函数
- [.getSideOutput(...)] // 可选:获取侧输出
Apache Flink的窗口(Window)生命周期是处理流数据时的一个重要概念,它定义了窗口从创建到销毁的整个过程以及在这个过程中如何应用计算。
Flink的窗口生命周期从窗口的创建开始,通过触发器的条件触发计算函数的应用,直到水印超过窗口的结束时间加上允许延迟时间后窗口被移除。在这个过程中,窗口可以通过逐出器进一步清理数据。了解窗口的生命周期和组件是有效使用Flink进行流处理的关键。
下一期,我将对ProcessWindowFunction,ReduceFunction,AggregationFunction进行详细地解析。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。