flink的窗口
目录
窗口分类
1.按照驱动类型分类
1. 时间窗口(Time window)
2.计数窗口(Count window)
2.按照窗口分配数据的规则分类
窗口API分类
API调用
窗口分配器器:
窗口函数
增量聚合函数:
全窗口函数
flink sql 窗口函数
窗口 | Apache Flink
窗口分类
1.按照驱动类型分类
1. 时间窗口(Time window)
时间窗口以时间点定义窗口的开始和结束,因此截取出就是某一段时间的数据。当到达结束时间时窗口不在接受数据,触发计算输出结果,并关闭销毁窗口。
flink有一个专门的类用来表示时间窗口TimeWindow,这个类只有两个私有属性;窗口的方法获取最大时间戳为end-1,因此窗口[start,end) 左开右闭;
@PublicEvolving
public class TimeWindow extends Window {
private final long start;
private final long end;
public TimeWindow(long start, long end) {
this.start = start;
this.end = end;
}
@Override
public long maxTimestamp() {
return end - 1;
}
2.计数窗口(Count window)
计数窗口是基于元素个数截取,在到达固定个数是就触发计算并关闭窗口。
stream.keyBy(data -> true)
.window(SlidingEventTimeWindows.of(Time.seconds(10), Time.seconds(2)))
// .max()
.aggregate(new AvgPv())
.print();
查看源代码,windou函数后见windowStrream时获取默认的触发器
@PublicEvolving
public WindowedStream(KeyedStream
this.input = input;
this.builder =
new WindowOperatorBuilder<>(
windowAssigner,
windowAssigner.getDefaultTrigger(input.getExecutionEnvironment()), //湖区触发器
input.getExecutionConfig(),
input.getType(),
input.getKeySelector(),
input.getKeyType());
}
// 计数窗口底层采用全局窗口加计数器来实现
public WindowedStream
return window(GlobalWindows.create()).trigger(PurgingTrigger.of(CountTrigger.of(size)));
}
public WindowedStream
return window(GlobalWindows.create())
.evictor(CountEvictor.of(size))
.trigger(CountTrigger.of(slide));
}
2.按照窗口分配数据的规则分类
滚动窗口(Tumbling Window)
窗口大小固定,窗口没有重叠;
滑动窗口 (Sliding Window)
滑动窗口有重叠,也可以没有重叠,如果窗口size和滑动size相等,等于滚动窗口;
会话窗口 (Session Window)
基于会话对窗口进行分组,与其他两个不同的是,会话窗口是借用会话