- 窗口:
一般真实的流都是无界的,窗口可以把无界的流进行切分,得到一个有界流。它会将数据分发到有限大小的桶内进行分析。
- window类型:
时间窗口 time window:滚动时间窗口,滑动时间窗口,会话窗口。 计数窗口 count window:滚动计数窗口,滑动计数窗口。 滚动窗口:tumbling window:将数据依据固定大小的窗口长度对数据进行切分。时间对齐,窗口长度固定,没有重叠。 滑动窗口:sliding window:滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成。窗口长度固定,可以有重叠。 会话窗口:session window:由一系列事件组合一个指定时间长度的timeout间隙组成,也就是一段时间没有接到新数据就会生成新的窗口。特点:时间无对齐。
- window API:
窗口分配器:window()方法 我们可以用.window()来定义一个窗口,然后基于这个window去做一些聚合操作或者其它处理操作。注意window()方法必须在keyby方法之后才能用。 flink提供了更加简单的.timeWindow()和.countWindow(),用于定义时间窗口和计数窗口。 DataStream<Tuple2<String,Double>> minTempPerWindowStream = dataStream .map(new MyMapper()) .keyby(data -> data.f0) .timeWindow( Time.seconds(15) ) .minBy(1);
- 窗口函数(window function):
window function定义了窗口中要对收集的数据所做的计算操作。 可以分为两类:增量聚合函数,increment aggregation functions,每条数据到来就进行计算,保持一个简单的状态。 如reduceFunction,aggregateFunction 全窗口函数,full windowFunctions,先把窗口所有数据收集起来,等到计算的时候会遍历所有数据。 如processWindowFunction,WindowFunction
- 其他可选API:
.trigger()--触发器,定义窗口什么时候关闭,触发计算并输出结果。 .evictor()--移除器,定义移除某些数据的逻辑。 .allowedLateness(),允许处理迟到的数据。 .sideOutputLateData(),将迟到的数据放入侧输出流。 .getSideOutput(),获取侧输出流。