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

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

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

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

递增时间戳的Assigner

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

注意上述情况仅在每个并行数据源task的时间戳都是以递增顺序到达时才是必要的(应当是必要条件?--翻译不确定),例如,在某特定部署中,一个Kafka分区是由一个并行性数据源读取的,那么上述情况仅在每个Kafka分区内的时间戳都是递增顺序出现时才是必要的。Flink的Watermark合并机制保证会在任何并行流在进行shuffle、 union、 connect或merge后都可以生成正确的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迟到的最大lateness。lateness的值为"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();
  }
});

Flink Program Guide (5) -- 预定义的Timestamp Extractor / Watermark Emitter (DataStream API编程指导 -- For Java)的更多相关文章

  1. Flink Program Guide (2) -- 综述 (DataStream API编程指导 -- For Java)

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  2. Flink Program Guide (10) -- Savepoints (DataStream API编程指导 -- For Java)

    Savepoint 本文翻译自文档Streaming Guide / Savepoints ------------------------------------------------------ ...

  3. Flink Program Guide (8) -- Working with State :Fault Tolerance(DataStream API编程指导 -- For Java)

    Working with State 本文翻译自Streaming Guide/ Fault Tolerance / Working with State ---------------------- ...

  4. Flink Program Guide (6) -- 窗口 (DataStream API编程指导 -- For Java)

    窗口(Window) 本文翻译自文档Windows ----------------------------------- Flink使用窗口的概念,根据element的时间戳或者其他指标,将可能无限 ...

  5. Flink Program Guide (4) -- 时间戳和Watermark生成(DataStream API编程指导 -- For Java)

    时间戳和Watermark生成 本文翻译自Generating Timestamp / Watermarks --------------------------------------------- ...

  6. Flink Program Guide (3) -- Event Time (DataStream API编程指导 -- For Java)

    Event Time 本文翻译自DataStream API Docs v1.2的Event Time ------------------------------------------------ ...

  7. Flink Program Guide (7) -- 容错 Fault Tolerance(DataStream API编程指导 -- For Java)

    false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-n ...

  8. Flink Program Guide (1) -- 基本API概念(Basic API Concepts -- For Java)

    false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-n ...

  9. 【源码解析】Flink 是如何基于事件时间生成Timestamp和Watermark

    生成Timestamp和Watermark 的三个重载方法介绍可参见上一篇博客: Flink assignAscendingTimestamps 生成水印的三个重载方法 之前想研究下Flink是怎么处 ...

随机推荐

  1. OpenCV学习笔记(一)安装及运行第一个OpenCV程序

    1.下载及安装 OpenCV是一套开源免费的图形库,主要有C/C++语言编写,官网: http://opencv.org/ .在 http://opencv.org/downloads.html 可以 ...

  2. IE8的项目在IE11下 一些功能无法实现的解决方案

    最近改了一些IE11下一些功能无法实现的项目,发现了有一些IE8下的方法 ,在IE11下被取消或者替代了,如下: 1.JavaScript 运行时错误: 对象不支持“attachEvent”属性或方法 ...

  3. Linux环境下常用的SSH命令

    目录操作: rm -rf mydir /*删除mydir目录*/ mkdir dirname /*创建名为dirname的目录*/ cd mydir /*进入mydir目录*/ cd – /*回上一级 ...

  4. MYSQL 维护表的常用 5 方法

    方法 1. analyze table: 本语句用于分析和存储表的关键字分布.在分析期间,使用一个读取锁定对表进行锁定.这对于MyISAM, BDB和InnoDB表有作用. 方法 2. CHECK T ...

  5. 闲来瞎扯 -- 在vs2008下编写linux程序

    虽说vim很强大,但是个人感觉器代码提示功能不如visual assist来的强大.如何使用visual assist来实现代码的提示功能呢? 首先说明我的环境 : 宿主机是xp(O(∩_∩)O~还是 ...

  6. Inno Setup技巧[界面]添加和自定义左下角标签

    原文 http://blog.sina.com.cn/s/blog_5e3cc2f30100cc49.html 本文介绍添加和自定义“左下角标签”的方法. 界面预览: Setup技巧[界面]添加和自定 ...

  7. JVM 看不到某些异常的stacktrace问题(转)

    在java 1.5的release notes里面可以看到这样一句话: The compiler in the server VM now provides correct stack backtra ...

  8. poj 3233 Matrix Power Series

    A为一个n*n的矩阵,求A+A^2+A^3+...+A^n Sk = A + A2 + A3 + - + Ak       =(1+Ak/2)*(A + A2 + A3 + - + Ak/2  )+{ ...

  9. Linux内核中常见内存分配函数(三)

    ioremap void * ioremap (unsigned long offset, unsigned long size) ioremap是一种更直接的内存“分配”方式,使用时直接指定物理起始 ...

  10. Storages and virtual servers

    1. IBM Storages: SONAS,V7k,V7ku,SVC,XIV 存储设备都安装了个性化定制的Linux系统,来完成不同的服务,这几台存储设备使用原理都是类似的,以SONAS (Scal ...