flink中窗口指派主要分为两类NoKeyed Windows
和Keyed Windows
,这里就结合这两类阐述窗口指派API
-
NoKeyed Windows
NoKeyed Windows
同时又分为两类Porcessing Time
和Event Time
,即处理时间语义和事件时间语义.-
事件时间语义
java// 事件时间语义-滚动窗口 source.windowAll(TumblingEventTimeWindows.of(Time.seconds(1))); // 事件时间语义-滑动窗口(参数1:窗口长度 参数2:滑动步长,计算频率) source.windowAll(SlidingEventTimeWindows.of(Time.seconds(5), Time.seconds(1))); // 事件时间语义-会话窗口-静态gap source.windowAll(EventTimeSessionWindows.withGap(Time.seconds(1))); // 事件时间语义-会话窗口-动态获取gap source.windowAll(EventTimeSessionWindows.withDynamicGap(element -> {...}));
-
处理时间语义
java// 处理时间语义-滚动窗口 source.windowAll(TumblingProcessingTimeWindows.of(Time.seconds(1))); // 处理时间语义-滑动窗口(参数1:窗口长度 参数2:滑动步长,计算频率) source.windowAll(SlidingProcessingTimeWindows.of(Time.seconds(5), Time.seconds(1))); // 处理时间语义-会话窗口-静态gap source.windowAll(ProcessingTimeSessionWindows.withGap(Time.seconds(1))); // 处理时间语义-会话窗口-动态获取gap source.windowAll(ProcessingTimeSessionWindows.withDynamicGap(element -> {...}));
-
-
Keyed Windows
同样Keyed Windows
也分为Porcessing Time
和Event Time
.-
事件时间语义
java// 事件时间语义-滚动窗口 keyedStream.window(TumblingEventTimeWindows.of(Time.seconds(1))); // 事件时间语义-滑动窗口(参数1:窗口长度 参数2:滑动步长,计算频率) keyedStream.window(SlidingEventTimeWindows.of(Time.seconds(5), Time.seconds(1))); // 事件时间语义-会话窗口-静态gap keyedStream.window(EventTimeSessionWindows.withGap(Time.seconds(1))); // 事件时间语义-会话窗口-动态获取gap keyedStream.window(EventTimeSessionWindows.withDynamicGap(element -> {...}));
-
处理时间语义
java// 处理时间语义-滚动窗口 keyedStream.window(TumblingProcessingTimeWindows.of(Time.seconds(1))); // 处理时间语义-滑动窗口(参数1:窗口长度 参数2:滑动步长,计算频率) keyedStream.window(SlidingProcessingTimeWindows.of(Time.seconds(5), Time.seconds(1))); // 处理时间语义-会话窗口-静态gap5 keyedStream.window(ProcessingTimeSessionWindows.withGap(Time.seconds(1))); // 处理时间语义-会话窗口-动态获取gap keyedStream.window(ProcessingTimeSessionWindows.withDynamicGap(element -> {...}));
-
窗口指派的API模板基本就这些内容,这里都是以时间窗口作为示例的,还有根据数据条数窗口的指派,窗口指派和时间窗口是一样的,只不过将keyedStream.window
更换成countWindow
.