Flink窗口window

  • 窗口:
    一般真实的流都是无界的,窗口可以把无界的流进行切分,得到一个有界流。它会将数据分发到有限大小的桶内进行分析。
    
  • window类型:
    时间窗口 time window:滚动时间窗口,滑动时间窗口,会话窗口。
    计数窗口 count window:滚动计数窗口,滑动计数窗口。
    滚动窗口:tumbling window:将数据依据固定大小的窗口长度对数据进行切分。时间对齐,窗口长度固定,没有重叠。
    滑动窗口:sliding window:滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成。窗口长度固定,可以有重叠。
    会话窗口:session window:由一系列事件组合一个指定时间长度的timeout间隙组成,也就是一段时间没有接到新数据就会生成新的窗口。特点:时间无对齐。
    
  • window API:
    窗口分配器:window()方法
    我们可以用.window()来定义一个窗口,然后基于这个window去做一些聚合操作或者其它处理操作。注意window()方法必须在keyby方法之后才能用。
    flink提供了更加简单的.timeWindow()和.countWindow(),用于定义时间窗口和计数窗口。
    DataStream<Tuple2<String,Double>> minTempPerWindowStream = dataStream
                                                                         .map(new MyMapper())
                                                                         .keyby(data -> data.f0)
                                                                         .timeWindow( Time.seconds(15) )
                                                                         .minBy(1);
    
  • 窗口函数(window function):
    window function定义了窗口中要对收集的数据所做的计算操作。
    可以分为两类:增量聚合函数,increment aggregation functions,每条数据到来就进行计算,保持一个简单的状态。
                              如reduceFunction,aggregateFunction
                全窗口函数,full windowFunctions,先把窗口所有数据收集起来,等到计算的时候会遍历所有数据。
                              如processWindowFunction,WindowFunction
            
    
  • 其他可选API:
    .trigger()--触发器,定义窗口什么时候关闭,触发计算并输出结果。
    .evictor()--移除器,定义移除某些数据的逻辑。
    .allowedLateness(),允许处理迟到的数据。
    .sideOutputLateData(),将迟到的数据放入侧输出流。
    .getSideOutput(),获取侧输出流。
    

posted on 2022-11-06 22:23  张少凯  阅读(97)  评论(0编辑  收藏  举报

导航