窗口编程模型
1 2 3 4 5 6 7 8 9
| stream .keyBy(...) <- 仅 keyed 窗口需要 .window(...) <- 必填项:"assigner" [.trigger(...)] <- 可选项:"trigger" (省略则使用默认 trigger) [.evictor(...)] <- 可选项:"evictor" (省略则不使用 evictor) [.allowedLateness(...)] <- 可选项:"lateness" (省略则为 0) [.sideOutputLateData(...)] <- 可选项:"output tag" (省略则不对迟到数据使用 side output) .reduce/aggregate/apply() <- 必填项:"function" [.getSideOutput(...)] <- 可选项:"output tag"
|
1 2 3 4 5 6 7 8
| stream .windowAll(...) <- 必填项:"assigner" [.trigger(...)] <- 可选项:"trigger" (else default trigger) [.evictor(...)] <- 可选项:"evictor" (else no evictor) [.allowedLateness(...)] <- 可选项:"lateness" (else zero) [.sideOutputLateData(...)] <- 可选项:"output tag" (else no side output for late data) .reduce/aggregate/apply() <- 必填项:"function" [.getSideOutput(...)] <- 可选项:"output tag"
|
窗口生命周期
备注:参考Flink代码WindowOperator和EvictingWindowOperator。
窗口分配器Window Assigner
WindowAssigner 负责将 stream 中的每个数据分发到一个或多个窗口中。
窗口函数Window Function
函数类型 |
说明 |
函数类 |
API |
聚合函数 |
每一次有数据被分配到窗口时,都会调用 ReduceFunction 或者 AggregateFunction 来增量聚合。 |
ReduceFunction
AggregateFunction |
WindowedStream:
sum(), max(), min(), maxBy(), reduce(), aggregate() |
窗口函数 |
ProcessWindowFunction 会缓存 Iterable 和窗口内容,供接下来全量的窗口计算。 |
ProcessWindowFunction
ProcessAllWindowFunction |
WindowedStream:
process(ProcessWindowFunction) |
聚合+窗口函数 |
ProcessWindowFunction 与 ReduceFunction 或 AggregateFunction 搭配使用,使其能够在数据到达窗口的时候进行增量聚合。在窗口关闭时,ProcessWindowFunction 会得到聚合的结果。这样就可以做到增量聚合窗口的元素,并且可以从 ProcessWindowFunction中获得窗口的元数据。 |
|
WindowedStream:
reduce(ReduceFunction,ProcessWindowFunction)
aggregate(AggregateFunction,WindowFunction) |
触发器Trigger
清除器Evictor
参考
- https://nightlies.apache.org/flink/flink-docs-master/docs/dev/datastream/operators/windows/
- https://nightlies.apache.org/flink/flink-docs-master/docs/learn-flink/streaming_analytics/
- https://nightlies.apache.org/flink/flink-docs-master/zh/docs/dev/datastream/event-time/generating_watermarks/