官网链接:
https://ci.apache.org/projects/flink/flink-docs-release-1.13/zh/docs/dev/datastream/operators/windows
背景
数据流是一直源源不断产生,业务需要聚合统计使用,比如每10秒统计过去5分钟的点击量、成交额等
Windows 就可以将无限的数据流拆分为有限大小的“桶 buckets”,然后程序可以对其窗口内的数据进行计算
窗口认为是桶,一个窗口段就是一个桶,比如8到9点是一个桶,9到10点是一个桶
分类
time Window 时间窗口,即按照一定的时间规则作为窗口统计
1. time-tumbling-window 时间滚动窗口 (用的多)
2. time-sliding-window 时间滑动窗口 (用的多)
3. session WIndow 会话窗口,即一个会话内的数据进行统计,相对少用
数量窗口:
- count Window 数量窗口,即按照一定的数据量作为窗口统计,相对少用
窗口属性
滚动窗口 Tumbling Windows
窗口具有固定大小
窗口数据不重叠
例子:每10s统计一次最近10s内的订单数量
滑动窗口 Sliding Windows
窗口具有固定大小
窗口数据有重叠
例子:每10s统计一次最近1min内的订单数量
窗口大小size 和 滑动间隔 slide 有keyBy 用 window() api 定义了如何将元素分配给窗口,负责将每条数据分发到正确的 window窗口上 用来控制一个窗口是否需要被触发 对数据进行解析 ,process对每个元素进行处理,相当于 map+flatMap+filter 欢迎分享,转载请注明来源:内存溢出
tumbling-window:滚动窗口: size=slide,如:每隔10s统计最近10s的数据
sliding-window:滑动窗口: size>slide,如:每隔5s统计最近10s的数据
size
没keyBy 用 windowAll() api ,并行度低
方括号 ([…]) 中的命令是可选的,允许用多种不同的方式自定义窗口逻辑stream
.keyBy(...) <- keyed versus non-keyed windows
.window(...) <- required: "assigner"
[.trigger(...)] <- optional: "trigger" (else default trigger)
[.evictor(...)] <- optional: "evictor" (else no evictor)
[.allowedLateness(...)] <- optional: "lateness" (else zero)
[.sideOutputLateData(...)] <- optional: "output tag" (else no side output for late data)
.reduce/aggregate/apply() <- required: "function"
[.getSideOutput(...)] <- optional: "output tag"
Non-Keyed Windows
stream
.windowAll(...) <- required: "assigner"
[.trigger(...)] <- optional: "trigger" (else default trigger)
[.evictor(...)] <- optional: "evictor" (else no evictor)
[.allowedLateness(...)] <- optional: "lateness" (else zero)
[.sideOutputLateData(...)] <- optional: "output tag" (else no side output for late data)
.reduce/aggregate/apply() <- required: "function"
[.getSideOutput(...)] <- optional: "output tag"
注:
窗口分配器 Window Assigners
window() 的参数是一个 WindowAssigner,flink本身提供了Tumbling、Sliding 等Assigner
每个 窗口分配器WindowAssigner 都有一个默认触发器,也支持自定义触发器
1.窗口保存临时数据,每进入一个新数据,会与中间数据累加,生成新的中间数据,再保存到窗口中
2.常见的增量聚合函数有 reduceFunction、aggregateFunction
3.min、max、sum 都是简单的聚合 *** 作,不需要自定义规则AggregateFunction
WindowFunction
process(new KeyedProcessFunction(){processElement、onTimer})
评论列表(0条)