内置水印生成器

正如在Generating Watermarks一文中所描述的,Flink提供了抽象,允许程序员分配自己的时间戳和发射自己的水印。更具体地说,可以通过实现WatermarkGenerator接口来实现。

为了进一步简化此类任务的编程工作,Flink自带了一些预先实现的时间戳分配器。本节提供了它们的列表。除了它们的开箱即用的功能外,它们的实现可以作为自定义实现的范例。

单调增加的时间戳

周期性水印生成的最简单的特殊情况是当给定源任务看到的时间戳以升序出现时。在这种情况下,当前的时间戳总是可以作为水印,因为不会有更早的时间戳到达。

请注意,只需要每个并行数据源任务的时间戳是升序的。例如,如果在一个特定的设置中,一个Kafka分区被一个并行数据源实例读取,那么只需要在每个Kafka分区内时间戳是升序的。每当并行流被洗牌、联合、连接或合并时,Flink的水印合并机制都会生成正确的水印。

WatermarkStrategy.forMonotonousTimestamps()

  

固定的延迟量

周期性水印生成的另一个例子是,当水印滞后于流中看到的最大(事件时间)时间戳的固定时间量时。这种情况涵盖了预先知道流中可能遇到的最大延迟的场景,例如,当创建一个包含时间戳分布在固定时间段内的元素的自定义源进行测试时。对于这些情况,Flink提供了BoundedOutOfOrdernessWatermarks生成器,它以maxOutOfOrderness作为参数,即在计算给定窗口的最终结果时,一个元素在被忽略之前允许迟到的最大时间。Lateness对应于t - t_w的结果,其中t是一个元素的(事件-时间)时间戳,t_w是之前的水印。如果lateness > 0,那么该元素被认为是迟到的,并且默认情况下,在计算其对应窗口的作业结果时被忽略。请参阅关于允许延迟的文档,以获得更多关于处理迟到元素的信息。

WatermarkStrategy
.forBoundedOutOfOrderness(Duration.ofSeconds(10))

  

Flink-v1.12官方网站翻译-P020-Builtin Watermark Generators的更多相关文章

  1. Flink-v1.12官方网站翻译-P018-Event Time

    事件时间 在本节中,您将学习如何编写时间感知的Flink程序.请看一下及时流处理,了解及时流处理背后的概念. 关于如何在Flink程序中使用时间的信息请参考windowing和ProcessFunct ...

  2. Flink-v1.12官方网站翻译-P005-Learn Flink: Hands-on Training

    学习Flink:实践培训 本次培训的目标和范围 本培训介绍了Apache Flink,包括足够的内容让你开始编写可扩展的流式ETL,分析和事件驱动的应用程序,同时省略了很多(最终重要的)细节.本书的重 ...

  3. Flink-v1.12官方网站翻译-P025-Queryable State Beta

    可查询的状态 注意:可查询状态的客户端API目前处于不断发展的状态,对所提供接口的稳定性不做保证.在即将到来的Flink版本中,客户端的API很可能会有突破性的变化. 简而言之,该功能将Flink的托 ...

  4. Flink-v1.12官方网站翻译-P002-Fraud Detection with the DataStream API

    使用DataStream API进行欺诈检测 Apache Flink提供了一个DataStream API,用于构建强大的.有状态的流式应用.它提供了对状态和时间的精细控制,这使得高级事件驱动系统的 ...

  5. Flink-v1.12官方网站翻译-P015-Glossary

    术语表 Flink Application Cluster Flink应用集群是一个专用的Flink集群,它只执行一个Flink应用的Flink作业.Flink集群的寿命与Flink应用的寿命绑定. ...

  6. Flink-v1.12官方网站翻译-P008-Streaming Analytics

    流式分析 事件时间和水印 介绍 Flink明确支持三种不同的时间概念. 事件时间:事件发生的时间,由产生(或存储)该事件的设备记录的时间 摄取时间:Flink在摄取事件时记录的时间戳. 处理时间:您的 ...

  7. Flink-v1.12官方网站翻译-P004-Flink Operations Playground

    Flink操作训练场 在各种环境中部署和操作Apache Flink的方法有很多.无论这种多样性如何,Flink集群的基本构件保持不变,类似的操作原则也适用. 在这个操场上,你将学习如何管理和运行Fl ...

  8. Flink-v1.12官方网站翻译-P001-Local Installation

    本地安装 按照以下几个步骤下载最新的稳定版本并开始使用. 第一步:下载 为了能够运行Flink,唯一的要求是安装了一个有效的Java 8或11.你可以通过以下命令检查Java的正确安装. java - ...

  9. Flink-v1.12官方网站翻译-P029-User-Defined Functions

    用户自定义函数 大多数操作都需要用户定义的函数.本节列出了如何指定这些函数的不同方法.我们还涵盖了累加器,它可以用来深入了解您的Flink应用. Lambda函数 在前面的例子中已经看到,所有的操作都 ...

  10. Flink-v1.12官方网站翻译-P028-Custom Serialization for Managed State

    管理状态的自定义序列化 本页面的目标是为需要使用自定义状态序列化的用户提供指导,涵盖了如何提供自定义状态序列化器,以及实现允许状态模式演化的序列化器的指南和最佳实践. 如果你只是简单地使用Flink自 ...

随机推荐

  1. mysql源码分析-启动过程

    mysql源码分析-启动过程 概要 # sql/mysqld.cc, 不包含psi的初始化过程 mysqld_main: // 加载my.cnf和my.cnf.d,还有命令行参数 if (load_d ...

  2. 利用dotnet-dump分析docker容器内存泄露

    目录 一 运行官方示例 1,Clone代码并编译 2,创建Dockerfile构建镜像 3,启动容器 二 生成dump转储文件 1,制造问题 2,创建dump文件 三 分析dump文件 1,创建一个用 ...

  3. 一个上传图片,预览图片的小demo

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 改进你的c#代码的5个技巧(三)

    本文完全独立于前两篇文章.如果你喜欢它们,我希望你也会喜欢这个.在上一篇文章中,我展示了哪种方法更快,并比较了代码的执行速度.在本文中,我将展示不同代码片段的内存消耗情况.为了显示内存映射和分配图,我 ...

  5. 为啥使用innodb_flush_method=o_direct 就能减轻io压力呢

    为啥使用innodb_flush_method=o_direct 就能减轻io压力呢

  6. 【Linux】rsync 守护进程的配置

    环境 centos7.2 1.首先查看是否安装rsync的相关包 rpm -qa | grep rsync rsync-3.1.2-4.el7.x86_64 如果没安装就yum install rsy ...

  7. 知识图谱KnowledgeGraph核心技术培训班 2月03日— 2月06日

  8. MySQL增删改操作

    增删改操作 增加 看语法 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3-字段n) VALUES(值1,值2,值3-值n); #指定字段来插入数据,插入 ...

  9. 初次使用Open Live Writer

    关于下载和配置 建议大家不要在官网下载,会出不来.华军软件园(或其他下载站)也提供Open Live Writer最新版的下载. 创建账户时千万不要写错地址,错一个就失败. 体验 体验还是很好的,美中 ...

  10. click的简单使用

    click的简单使用 先通过一个简单的例子来认知一下click把 import click @click.command() @click.option('-p', '--port', default ...