[Flink]Flink1.3 Stream指南七 理解事件时间与Watermarks

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Flink实现了数据流模型(Dataflow Model)中许多技术。如果想对事件时间(event time)和水位线(watermarks)更详细的了解,请参阅下面的文章:The world beyond batch: Streaming 101The Dataflow Model支持事件时间的流处理器需要一种方法来衡量事件时间的进度。

Flink实现了数据流模型(Dataflow Model)中许多技术。如果想对事件时间(event time)和水位线(watermarks)更详细的了解,请参阅下面的文章:

支持事件时间的流处理器需要一种方法来衡量事件时间的进度。例如,一个构建按小时处理窗口的窗口算子,当事件时间超过一小时末尾时需要被通知(a window operator that builds hourly windows needs to be notified when event time has passed beyond the end of an hour),以便操作员可以关闭正在进行的窗口。

事件时间可以独立于处理时间来运行。例如,在一个程序中,算子(operator)的当前事件时间可以略微落后于处理时间(考虑接收事件的延迟),而两者以相同的速度继续前行。另一方面,另一个流式处理程序可以运行几个星期的事件时间,但是处理只需几秒钟(another streaming program might progress through weeks of event time with only a few seconds of processing),通过快速转发已经在Kafka Topic中缓冲的一些历史数据。

Flink中测量事件时间进度的机制是水位线(watermarks)。水位线作为数据流的一部分流动,并携带时间戳t。Watermark(t)声明在数据流中事件时间已达到时间t,这意味着流不再有时间戳t'<= t(即时间戳老于或等于水印的事件)的元素。

下图显示了具有时间戳(逻辑上)和内嵌watermark的事件流。在这个例子中,事件是顺序的(相对于它们的时间戳),这意味着水位线只是数据流中的周期性标记。

watermark对于乱序数据流至关重要,如下图所示,事件并未按照时间戳进行排序。通常,watermark是数据流中一个点的声明,到达某一时间戳的所有事件都应该已经到达这一点(watermark is a declaration that by that point in the stream, all events up to a certain timestamp should have arrived)。一旦watermark达到算子,算子就可以将其内部的事件时间时钟提前到watermark的值。

1. 数据流中的并行Watermarks

watermarks是直接通过源函数(source functions)生成的或在源函数之后生成的。源函数的每个并行子任务通常独立生成watermarks。这些watermarks在该特定并行源中定义事件时间。

watermarks贯穿整个流处理程序,他们会在到达的算子处将事件时间提前(they advance the event time at the operators where they arrive)。无论算子提前事件时间到何时,它都会为下游的后续算子生成一个新的watermarks(Whenever an operator advances its event time, it generates a new watermark downstream for its successor operators.)。

一些算子消耗多个输入流;union操作,例如后面跟着keyBy(...)函数或者partition(...)函数。这样的算子的当前事件时间是其输入流的事件时间的最小值。由于输入流更新了事件时间,因此算子也是如此。

下图显示了流过并行流的事件和watermarks的示例,以及跟踪事件时间的算子:

2. 延迟元素

某些元素可能违反watermarks条件,这意味着即使在watermarks(t)发生之后,还是会出现很多的时间戳t'<= t的元素。事实上,在现实世界的许多设置中,某些元素可以被任意地延迟,因此指定一个时间,在这个时间内所有在一个特定事件时间戳的事件都会发生是不可能的(making it impossible to specify a time by which all elements of a certain event timestamp will have occurred)。 此外,即使延迟可以被限制,但通常也不希望延迟太多的watermarks,因为它在事件时间窗口的评估中导致太多的延迟。

因此,流处理程序中可能会明确地指定一些延迟元素。延迟元素是在系统的事件时钟(由水印发出信号)之后已经通过了延迟元素时间戳的时间之后到达的元素(Late elements are elements that arrive after the system’s event time clock (as signaled by the watermarks) has already passed the time of the late element’s timestamp.)。 有关如何处理事件时间窗口中的晚期元素的更多信息,请参阅允许的延迟。

3. 调试Watermarks

请参阅调试Windows和事件时间部分,以便在运行时调试Watermarks。

原文:https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/event_time.html#event-time-and-watermarks

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
10天前
|
消息中间件 资源调度 关系型数据库
如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理
本文介绍了如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理。主要内容包括安装Debezium、配置Kafka Connect、创建Flink任务以及启动任务的具体步骤,为构建实时数据管道提供了详细指导。
32 9
|
1月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
37 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
1月前
|
Java Shell 流计算
Flink-02 Flink Java 3分钟上手 Stream SingleOutputStreamOpe ExecutionEnvironment DataSet FlatMapFunction
Flink-02 Flink Java 3分钟上手 Stream SingleOutputStreamOpe ExecutionEnvironment DataSet FlatMapFunction
23 1
Flink-02 Flink Java 3分钟上手 Stream SingleOutputStreamOpe ExecutionEnvironment DataSet FlatMapFunction
|
1月前
|
存储 Java 数据处理
Flink-01 介绍Flink Java 3分钟上手 HelloWorld 和 Stream ExecutionEnvironment DataSet FlatMapFunction
Flink-01 介绍Flink Java 3分钟上手 HelloWorld 和 Stream ExecutionEnvironment DataSet FlatMapFunction
35 1
|
1月前
|
分布式计算 监控 大数据
大数据-129 - Flink CEP 详解 Complex Event Processing - 复杂事件处理
大数据-129 - Flink CEP 详解 Complex Event Processing - 复杂事件处理
53 0
|
3月前
|
消息中间件 存储 Kafka
【Azure 事件中心】Flink消费Event Hub中事件, 使用Azure默认示例代码,始终获取新产生的事件,如何消费旧事件呢?
【Azure 事件中心】Flink消费Event Hub中事件, 使用Azure默认示例代码,始终获取新产生的事件,如何消费旧事件呢?
|
3月前
|
消息中间件 监控 Kafka
实时计算 Flink版产品使用问题之处理Kafka数据顺序时,怎么确保事件的顺序性
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
运维 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之同步MySQL数据并EP(复杂事件处理)时,编译报错,如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
122 1
|
5月前
|
关系型数据库 数据库 流计算
实时计算 Flink版操作报错合集之在使用Flink CDC TiDB Connector时,无法获取到事件,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
410 0