专栏首页SmartSiFlink1.4 内置的时间戳提取器和Watermark生成器

Flink1.4 内置的时间戳提取器和Watermark生成器

Flink1.4 生成时间戳与Watermarks所介绍的,Flink提供了一个抽象类,允许程序员可以分配自己的时间戳并发送Watermark。更具体地说,可以通过AssignerWithPeriodicWatermarksAssignerWithPunctuatedWatermarks接口来实现,具体实现取决于用户具体情况。第一个接口将周期性的发送Watermark,第二个则基于传入记录的某些属性发送Watermark,例如,当在流中遇到特殊元素时。

为了进一步缓解这些任务的编程工作,Flink带有一些内置的时间戳分配器。除了开箱即用的功能外,它们的实现也可以作为自定义实现的一个例子。

1. 递增时间戳分配器

周期性生成Watermark最简单的例子是给定数据源任务中的时间戳会递增顺序出现。在这种情况下,由于没有时间戳比当前时间戳还早到达的,所以当前时间戳可以始终充当Watermark

请注意,每个并行数据源任务的时间戳必须是升序的。例如,如果在特定设置中,一个并行数据源实例读取一个Kafka分区,那么只需要确保在每个Kafka分区内时间戳是升序的即可。每当并行数据流被shuffleunion,连接或合并时,FlinkWatermark合并机制能够产生正确的watermarks

Java版本:

DataStream<MyEvent> stream = ...

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

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

Scala版本:

val stream: DataStream[MyEvent] = ...

val withTimestampsAndWatermarks = stream.assignAscendingTimestamps( _.getCreationTime )

2. 允许固定数量延迟的分配器

周期性生成Watermark的另一个例子是当Watermark落后于数据流中看到的最大时间戳(事件时间)一固定数量时间(a fixed amount of time)。这种情况涵盖了事先知道流中可能遇到的最大延迟的场景,例如,当创建一个测试用的自定义数据源时,其上每个元素的时间戳分布在一个固定时间段内。对于这些情况,Flink提供了BoundedOutOfOrdernessTimestampExtractor,带有一个maxOutOfOrderness参数,即在计算给定窗口最终结果一个元素在被忽略之前允许延迟的最大时间。延迟对应于t-t_w的结果,其中t是元素的(事件时间)时间戳,t_w是前一个Watermark时间戳。如果延迟大于0,则该元素被认为是迟到的,并且在计算其相应窗口的作业结果时默认为忽略该元素。

Java版本:

DataStream<MyEvent> stream = ...

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

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

Scala版本:

val stream: DataStream[MyEvent] = ...

val withTimestampsAndWatermarks = stream.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor[MyEvent](Time.seconds(10))( _.getCreationTime ))

原文:https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/event_timestamp_extractors.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Flink1.4 生成时间戳与Watermarks

    本节适用于在事件时间上运行的程序。有关事件时间,处理时间和提取时间的介绍,请参阅Flink1.4 事件时间与处理时间。

    smartsi
  • Spark2.3.0 共享变量

    通常情况下,传递给 Spark 操作(例如 map 或 reduce)的函数是在远程集群节点上执行的,函数中使用的变量,在多个节点上执行时是同一变量的多个副本。...

    smartsi
  • Flink1.4 图解Watermark

    如果你正在构建实时流处理应用程序,那么事件时间处理是你迟早必须使用的功能之一。因为在现实世界的大多数用例中,消息到达都是无序的,应该有一些方法,通过你建立的系统...

    smartsi
  • Hive中分区和分桶的概念和操作

    在使用传统的RDBMS数据库(关系数据库),例如MySql时,对于一些大表,我们通常会进行分表操作,以提升查询效率。在Hive中也提供了类似的概念和操作,本文将...

    张子阳
  • 梯度下降法公式推导过程--再次补充:导数部分化简

    前面一篇就是基础性的推导过程。从反馈的情况看,总体还是讲明白了。但是在导数的部分,仍有不少的存疑。 其实在数学方面,我也是学渣。所以尽我所能,希望再次的补...

    俺踏月色而来
  • 【Netty】02-netty中不得不说的粘包与拆包

    第二个要素为缓冲区。当我们采用了缓冲区以后,缓冲区会有固定大小,当发送的数据和缓冲区的大小不一致时,就会发生粘包和拆包。我们可以理解为:当缓冲区的大小被装满时,...

    envoke
  • 一道SQL考题的更多思考

    问题1,方案1执行update,select的结果应该是(1e,2b),存在不匹配的记录,不会进行更新,是我贴错了,我的锅,

    bisal
  • PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案

    不得不再次吐槽一下exploit-db对exp审核的质量,这个exp仍然不能触发漏洞,修改第一个参数则可以触发,我给出的poc是一个可以触发php漏洞的,问题出...

    砸漏
  • 腾讯乐享成为国内首家通过ISO27001认证的企业社区平台

    2019年3月8日,DNV GL管理服务集团大中国区副总裁陈立在深圳飞亚达大厦,为腾讯旗下的企业社区平台腾讯乐享颁发了ISO27001信息安全管理体系认证证书。

    腾讯技术工程官方号
  • 腾讯乐享成为国内首家通过ISO27001认证的企业社区平台

    2019年3月8日,DNV GL管理服务集团大中国区副总裁陈立在深圳飞亚达大厦,为腾讯旗下的企业社区平台腾讯乐享颁发了ISO27001信息安全管理体系认证证书。

    腾讯技术工程官方号

扫码关注云+社区

领取腾讯云代金券