Flink Window
window
- 一般真实的流都是无界的,怎样处理无界的数据?
- 可以把无限的数据流进行切分,得到有限的数据集进行处理 — 也就是得到有界流
- 窗口(window)就是将无限流切割为有限流的一种方式,它会将流数据分发到有限大小的桶(bucket)中进行分析
window类型
-
时间窗口
-
滚动时间窗口
将数据依据固定的窗口长度对数据进行切分
时间对齐,窗口长度固定,没有重叠
-
滑动时间窗口
滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成
窗口长度固定,可以有重叠
-
会话窗口
由一系列事件组合一个指定时间长度的timeout间隙组成,也就是一段时间没有接收到新数据就会生成新的窗口
特定:时间无对齐
-
-
计数窗口
- 滚动计数窗口
- 滑动计数窗口
Window API
窗口分配器 ------ window() 方法
-
使用.window来定义一个窗口,然后基于这个window去做一些聚合或者其它处理操作。主要window()方法必须在keyBy之后才能用。
-
Flink提供了更加简单的.timeWindow和.countWindow方法,用于定义时间窗口和计数函数。
DataStrean<Tuple2<String,Double>> minTempWindowStream = dataStream .map(new Mapper()) .keyby(data->data.f0) .timeWindow(Time.seconds(15)) .minBy(1);
-
案例
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> filedata = env.readTextFile("data/temps.txt"); DataStream<TempInfo> mapData = filedata.map(new MapFunction<String, TempInfo>() { @Override public TempInfo map(String value) throws Exception { String[] split