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。

为了进一步简化开发者开发类似的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();
  }
});

时间: 2024-08-02 06:51:05

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

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

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} 张安 张安 2 1 2016-08-02T10:56:00Z 2016-08-02T10:56:00Z 1 2945 16790 139 39 19696 16.00 false false false false

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

Savepoint 本文翻译自文档Streaming Guide / Savepoints ------------------------------------------------------------- 使用DataStream API编写的程序可以从一个savepoint处恢复执行.savepoint可以同时更新你的程序和Flink集群而不丢失任何状态.该文档包括了从触发.存储以及销毁(dispose)savepoint的所有内容.有关Flink如何处理状态和失效的详细内容,请见文

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

Event Time 本文翻译自DataStream API Docs v1.2的Event Time ------------------------------------------------------- 一.事件时间 / 处理时间 / 提取时间 Flink支持流程序不同的time概念. ·        Processing time:处理时间指执行对应Operation的设备的系统时间. 当一个流程序以处理时间运行,所有基于时间的operation(如time窗口)将使用运行对应O

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

窗口(Window) 本文翻译自文档Windows ----------------------------------- Flink使用窗口的概念,根据element的时间戳或者其他指标,将可能无限的DataStream分割为有限的数据切片(slice).我们在处理无限数据流以及进行聚合element的transformation时需要此种窗口分割. 注意:我们在此文档中讨论的大多是keyed windowing,即window是应用在KeyedStream上的.关键字下的窗口具有一定的优势,

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-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt

Flink Program Guide (9) -- StateBackend : Fault Tolerance(Basic API Concepts -- For Java)

State Backends 本文翻译自文档Streaming Guide / Fault Tolerance / StateBackend ----------------------------------------------------------------------------------------- 使用Data Stream API编写的程序通常以多种形式维护状态: ·  窗口将收集element或在它被触发后聚合element ·  Transformation方法可能会

Flink DataStream API Programming Guide

Example Program The following program is a complete, working example of streaming window word count application, that counts the words coming from a web socket in 5 second windows.   public class WindowWordCount { public static void main(String[] arg

Calabash-android 预定义steps

Calabash-android目录下的canned_steps.md中列出了一系列预定义的steps,这些steps的定义位于calabash-android\steps\目录下.本文将介绍这些steps和用法. 1.断言steps:定义在assert_steps.rb中 断言看到了文本: Then /^I see the text "([^\"]*)"$/ Then /^I see "([^\"]*)"$/ Then /^I should s

C++系统预定义4个用于标准数据流对象

C++系统预定义4个用于标准数据流对象 cin   cout   cerr   clog C++里关于cerr,clog,cout三者的区别: cerr(无缓冲标准错误)-----没有缓冲,发送给它的内容立即被输出 clog(有缓冲标准错误)--------有缓冲,缓冲区满时输出 cout-------------------------标准输出 联系:三个都是ostream类定义的输出流对象, cout是在终端显示器输出,cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据, 但是当向c