窗口编程模型
| 12
 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"
 
 | 
| 12
 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/