• flink的watermark和window介绍以及延迟数据的处理


    一:WaterMark

    本质:时间戳

    作用:用于处理乱序事件

    适用场景:基于事件时间做窗口运算

    产生频率:默认是来一条数据下发一次watermark,但是可以调整setAutoWatermarkInterval参数设置下发watermark的时间间隔,性能会有一定的提升。

    多并发的情况下,取wateramark最小的一个,例如:p1-> 12,p2->14,p3->8,则watermark取最小的8

    获取watermark的位置:最好紧跟着source

    说明:source端假设有两个并发,并发1的wateramark是33,并发2的watermark是88,那么source的watermark就取最小的那个33,但是如果在map之后获取watermark,由于是并发的,多个并发之间的数据没有顺序,可能来的数据的wateramark是50,但是很多数据产生的watermark都小于50,这样就会导致数据大量丢失,所以watermark的获取最好紧跟着source。

    二:Window

    2.1 类型汇总

    窗口分为三种,timewindow、countwindow和自定义的window。timewindow还分为滚动窗口,滑动窗口和会话窗口,图中没有画出,比较常用的是滚动窗口。

    2.2  滚动窗口

    窗口大小是人为设置的,一条事件同时只能在一个窗口中,窗口之间不重叠。

    2.3 滑动窗口

    窗口大小是人为设置的,滑动的大小也是人为设置的,一条事件可能同时存在于多个窗口中,窗口之间可重叠。

    2.4 会话窗口

     窗口没有固定的开始和结束时间,窗口不重叠。

    三:Window和watermark的结合处理数据乱序问题

     这里面有两个时间概念:生成watermark的时候,允许乱序的时间和allowedLatest。

    通过运行结果可以看出:第一条数据进来的时候,生成一个窗口为[15,20),第二条数据进来的时候同样属于第一个窗口,当第三条数据进来的时候,产生的watermark大于第一个窗口的结束时间,所以第一个窗口触发计算,产生结果,当第四条数据进来的时候,由于第一个窗口还没有销毁并且属于第一个窗口,所以可以再次触发窗口运算,第一个窗口的销毁时间为2019-05-30 17:12:22,也就是当watermark的时间大于这个值的时候,再来属于该窗口的数据就属于延迟数据,不能触发运算,之后进来的数据依旧是如此。

  • 相关阅读:
    Spring MVC的常用注解(一)
    Spring MVC接口实例
    MVC模式和Spring MVC初识
    Hbase数据结构和shell操作
    Hbase的安装和配置
    ZooKeeper安装、配置和使用
    hadoop的安装和配置
    VMware Workstation安装CentOS 7和开发环境
    Java基础-内部类
    SSM三大框架整合
  • 原文地址:https://www.cnblogs.com/lyr999736/p/12092780.html
Copyright © 2020-2023  润新知