zoukankan      html  css  js  c++  java
  • Flink Program Guide (5) -- 预定义的Timestamp Extractor / Watermark Emitter (DataStream API编程指导 -- For Java)

    本文翻译自Pre-defined Timestamp Extractors / Watermark Emitter

    ------------------------------------------------------------------------------------------

    正如timestamps and watermark handling中所述,Flink提供了抽象类来让开发者赋值自己的时间戳并发送他们自己的Watermark。更具体来说,开发者需要依照不同用例情况来实现接口AssignerWithPeriodicWatermarks或接口AssignerWithPunctuatedWatermarks。简而言之,前一个接口将会周期性发送Watermark,而第二个接口根据一些到达数据的属性,例如一旦在流中碰到一个特殊的element便发送Watermark

     

    为了进一步简化开发者开发类似的taskFlink自带了一些预先实现的timestamp assigner。本节提供了它们的一个列表。除过引用即用的函数,这些预先实现的assigner还可以作为自定义assigner的实现示例。

     

    递增时间戳的Assigner

    最简单的周期性Watermark生成的特例便是由一个给定的Source task所见的时间戳都以递增顺序发生的情况。在这种情况下,由于不会有比当前时间戳更早的时间戳到达,故总是可以将当前时间戳看作是一个Watermark

     

    注意上述情况仅在每个并行数据源task的时间戳都是以递增顺序到达时才是必要的(应当是必要条件?--翻译不确定),例如,在某特定部署中,一个Kafka分区是由一个并行性数据源读取的,那么上述情况仅在每个Kafka分区内的时间戳都是递增顺序出现时才是必要的。FlinkWatermark合并机制保证会在任何并行流在进行shuffle union connectmerge后都可以生成正确的Watermark

     

    DataStream<MyEvent> stream = ...

    DataStream<MyEvent> withTimestampsAndWatermarks =
      stream.
    assignTimestampsAndWatermarks(new AscendingTimestampExtractor<MyEvent>() {

      @Override
      public
    long extractAscendingTimestamp(MyEvent element) {
        return element.
    getCreationTime();
      }
    });

     

    允许固定量的迟到数据的Assigner

    另一个周期性Watermark生成的例子是Watermark落在流中的一个固定时间段内观察到的最大(事件时间的)时间戳的后面。该情况同样包括预先知道在流中将会遇到的最大迟到量(lateness)的情况,例如创建的一个测试用的自定义source中,它的element的时间戳会分布在一个固定的时间段内。Flink为这种情况提供了BoundedOutofOrdernessTimestampExtractor接口,该接口需要参数maxOutofOrderness,即在一个element被给定窗口在计算最终结果时忽略之前(即该element过期前),所允许该element迟到的最大latenesslateness的值为"t-t_w",其中t是一个element的(事件时间的)时间戳,t_w是前一个watermark。如果lateness > 0,则我们就认为该element已经迟到,并且在job计算对应窗口的结果时忽略它。

    DataStream<MyEvent> stream = ...

    DataStream<MyEvent> withTimestampsAndWatermarks =
      stream.
    assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor<MyEvent>(Time.seconds(10)) {

      @Override
      public
    long extractAscendingTimestamp(MyEvent element) {
        return element.
    getCreationTime();
      }
    });

  • 相关阅读:
    项目管理【53】 | 项目风险管理-规划风险应对
    Learning a Continuous Representation of 3D Molecular Structures with Deep Generative Models
    转:DenseNet
    转:期刊投稿中的简写(ADM,AE,EIC等)与流程状态解读
    论文中如何写算法伪代码
    氨基酸,多肽,蛋白质等
    pytorch查看全连接层的权重和梯度
    AI制药文章
    long-tail datasets
    转:Focal Loss理解
  • 原文地址:https://www.cnblogs.com/lanyun0520/p/5755124.html
Copyright © 2011-2022 走看看