• Flink学习22:窗口的划分


    1.简介

    主要有2种窗口,一个基于时间窗口,一个是基于数量窗口。

    时间窗口中起止时间是,左闭右开

     

     

    2.时间概念

    2.1 事件生成时间

    EventTime

    指的是数据在设备上产生的时间。

    这种模式下,不管数据何时到达或者顺序如何,都能得到一致的结果。

    但是,在数据时间乱序的情况下,会产生一些延迟,性能会有影响。

    ps: 1.12以后版本的flink,设置 事件时间窗口类型时(setStreamTimeCharacteristic )这个不需要设置,默认就是eventtime,

    但是eventTime必须要设置水位线(assignTimestampsAndWatermarks,要指定时间字段),而基于处理时间的窗口processTime,不必须设置水位线。

    2.2事件接入时间

    Ingestion Time

    指的是 数据接入flink的时间。

    依赖算子所在主机的系统时钟。

    接入时间位于,生成时间和处理时间之间。

    事件接入时间模式,不能处理时间乱序和数据延迟问题。但是可以处理flink内部处理数据乱序问题。(该模式无法解决,数据到达flink之前,产生的乱序问题)

    2.3事件处理时间

    Processing Time

    指的是算子在操作过程中,获取的主机时间。

    该模式下,实时性最高。但是计算结果不一定准确。

    主要用于计算精度不是很高,比如延时比较高的日志数据。

    将事件时间和处理时间,进行区分,是flink的一大进步。(比如spark中是没有处理时间的,只有事件时间)

    事件时间和处理时间的区别

     3.flink设置时间窗口模式

    eg: 设置事件时间 EventTime(1.12以后版本的flink不需手动设置,默认就是EventTime)

    import org.apache.flink.streaming.api.TimeCharacteristic
    import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
    
    object TimeWindowsTest {
      def main(args: Array[String]): Unit = {
    
        //create env
        val env = StreamExecutionEnvironment.getExecutionEnvironment
    
        //set the Event time windows
        env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
        
        //set the processingTime
        env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)
    
      }
    
    }
    

  • 相关阅读:
    5分钟教你如何设计一个安全web架构
    jdk1.8堆内存学习
    PHP接口自动化测试框架实现
    POE 利用区块链挖掘协同执行遗传算法
    如何恢复电脑上删除的文件?说到做到!
    Rust面试题
    使用编辑距离实现英语单词纠错-面向对象实现
    linux 查看 io使用率iotop
    2023高教杯数学建模2:DE题+参考论文、代码
    PLC-Recorder以2ms的高速采集西门子S7-1500数据的方法
  • 原文地址:https://blog.csdn.net/hzp666/article/details/126361941