• Flink 支持三种时间语义


    在 Apache Flink 中,时间在流处理中是一个重要的概念,而时间语义则用于定义事件发生的时间。Flink 支持三种时间语义,分别是:

    1. Processing Time(处理时间):
      • 以机器的系统时间为基准,每个事件被处理时的时间。
      • 这是最简单和最低开销的时间概念,因为不需要处理事件中的时间戳信息。
      • 处理时间应用程序通常对延迟敏感性不高。
    // 示例:在 Flink 程序中使用处理时间
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    DataStream<MyEvent> stream = env.addSource(new MyEventSource());
    stream
      .keyBy(MyEvent::getKey)
      .timeWindow(Time.seconds(10))
      .process(new MyProcessWindowFunction());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. Event Time(事件时间):
      • 以事件的时间戳为基准,这是数据产生的实际时间。
      • 适用于乱序事件的场景,可以通过水位线(watermark)来处理迟到的事件。
      • 需要在数据中包含准确的时间戳信息。
    // 示例:在 Flink 程序中使用事件时间
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    DataStream<MyEvent> stream = env.addSource(new MyEventSource());
    stream
      .assignTimestampsAndWatermarks(new MyTimestampExtractor())
      .keyBy(MyEvent::getKey)
      .timeWindow(Time.seconds(10))
      .process(new MyProcessWindowFunction());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. Ingestion Time(摄入时间):
      • 以事件进入 Flink 的时间为基准。
      • 通常是事件进入 Flink 的 Source 算子的时间。
      • 摄入时间介于处理时间和事件时间之间,适用于不需要关注数据源的实际时间戳,但又不想使用处理时间的场景。
    // 示例:在 Flink 程序中使用摄入时间
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    DataStream<MyEvent> stream = env.addSource(new MyEventSource());
    stream
      .assignTimestampsAndWatermarks(new IngestionTimeExtractor())
      .keyBy(MyEvent::getKey)
      .timeWindow(Time.seconds(10))
      .process(new MyProcessWindowFunction());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在 Flink 中,可以通过 StreamExecutionEnvironmentsetStreamTimeCharacteristic() 方法来设置时间语义。例如:

    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
    
    • 1
    • 2
  • 相关阅读:
    FarEye与Pepperfry合作提升家具配送体验
    Flink学习第四天——完成第一个Flink 流批一体案例
    【老文新发】Otsu大津法详解及python实现
    Flink——监控
    GBase 8c数据类型-位串类型
    无线设备的天线怎么安装最好?
    Golang入门:协程(goroutine)
    riscv-gcc工具编译firmware进行仿真问题总结
    SpringMVC:整合SSM
    SQL 选择数据库 USE语句
  • 原文地址:https://blog.csdn.net/u011095039/article/details/134382031