网站设计平台,设计网站包含的功能模块,wordpress固定链接插件,wordpress 显示小工具栏文章目录 1、窗口2、分类3、窗口API概览4、窗口分配器 在批处理统计中#xff0c;可以等待一批数据都到齐后#xff0c;统一处理。但是在无界流的实时处理统计中#xff0c;是来一条就得处理一条#xff0c;那么如何统计最近一段时间内的数据呢#xff1f; ⇒ 窗口的概念可以等待一批数据都到齐后统一处理。但是在无界流的实时处理统计中是来一条就得处理一条那么如何统计最近一段时间内的数据呢 ⇒ 窗口的概念将无限数据切割成一个个的数据块 1、窗口
Flink的窗口可以理解为一个桶水龙头下面的水桶的桶窗口把无限流切割成一个个存储桶流中数据被分发到对应的桶再按需对每个桶中收集的数据做计算。 2、分类 按照驱动类型分 即按照窗口怎么去截取数据来分
时间窗口以时间点来定义窗口的开始和结束定点发车到点窗口就不再收集数据且触发计算和窗口的销毁关闭计数窗口基于当前窗口里的元素个数人齐发车 按窗口数据分配规则 滚动窗口
固定大小均匀切片窗口之间首位相接没有重叠也没有间隔每个数据都会被分配到一个窗口且只会属于一个窗口关键参数窗口大小Windows size可以时时长也可以时元素数 滑动窗口
窗口大小固定但不是首尾相接关键参数窗口大小windows size、滑动步长windows slide滑动步长即代表计算频率滑动步长小于窗口大小时出现重叠此时的数据可能会被同时分配到多个窗口size除以slide滚动窗口即sizeslide的滑动窗口举例计算最近一个小时的订单数每10分钟输出一次即窗口长度一小时滑动步长10分钟 会话窗口
基于会话来分割数据参数会话超时时间size相邻两条数据的间隔大于会话超时时间时切割一次开新的窗口会话窗口长度不是固定的会话窗口不会重叠且留至少为size的间隔session gap举个例子上一条数据走了十分钟后下一条数据还没有到来即默认会话中止下次数据来时开启新的会话窗口。关键词间隔多久没有数据进来 全局窗口
把相同key的所有数据都分配到同一个窗口全局窗口没有结束时间点窗口没结束时默认不触发计算因此需要自定义触发器才能做计算。比如Flink的计数窗口底层就是全局窗口 3、窗口API概览
调用窗口API前要确定是否是基于按键分区Keyed的数据流KeyedStream来开窗即调用窗口算子之前是否有keyBy操作按键分区的窗口
对DataStream先keyby此时数据流被分成多条逻辑流即一个个KeyedStream基于KeyedStream做窗口操作窗口计算会在多个并行子任务上同时执行相同key的数据会被发送到同一个并行子任务而窗口操作会基于每个key进行单独的处理
stream.keyBy(...).window(...)对于非按键分区的窗口操作原始的DataStream就不会分成多条逻辑流这时窗口逻辑只能在一个任务task上执行就相当于强行把并行度变成了1
stream.windowAll(...)对于非按键分区的窗口操作手动调大窗口算子的并行度也是无效的windowAll本身就是一个非并行的操作。 对于窗口的操作分为窗口分配器和窗口函数前者指明了窗口的类型是时间窗口、计数窗口、滑动、滚动还是会话窗口。后者定义窗口数据的计算和处理逻辑
stream.keyBy(key selector).window(window assigner).aggregate(window function)
4、窗口分配器 时间窗口 时间窗口是最常用的窗口类型又可以细分为滚动、滑动和会话三种
滚动
stream.keyBy(...).window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //长度为5秒的滚动窗口.aggregate(...)滑动
stream.keyBy(...)//长度为10秒、滑动步长为5秒的滑动窗口.window(SlidingProcessingTimeWindows.of(Time.seconds(10)Time.seconds(5))).aggregate(...)
会话
stream.keyBy(...).window(ProcessingTimeSessionWindows.withGap(Time.seconds(10))) //会话的超时时间.aggregate(...) 看完window方法的传参窗口分配器由类xxxEventTimeWindows提供
//滚动
stream.keyBy(...).window(TumblingEventTimeWindows.of(Time.seconds(5))).aggregate(...)
//滑动
stream.keyBy(...).window(SlidingEventTimeWindows.of(Time.seconds(10)Time.seconds(5))).aggregate(...)
//会话
stream.keyBy(...).window(EventTimeSessionWindows.withGap(Time.seconds(10))).aggregate(...) 计数窗口 滚动计数
stream.keyBy(...).countWindow(10)
滑动计数
stream.keyBy(...).countWindow(103) //传入两个参数size和slide 全局窗口 全局窗口是计数窗口的底层实现一般在需要自定义窗口时使用。它的定义同样是直接调用.window()分配器由GlobalWindows类提供。
stream.keyBy(...).window(GlobalWindows.create());使用全局窗口必须自行定义触发器才能实现窗口计算否则不起作用。