Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Flink1.4 事件时间与Watermarks

Flink1.4 事件时间与Watermarks

作者头像
smartsi
发布于 2019-08-07 01:00:12
发布于 2019-08-07 01:00:12
55200
代码可运行
举报
文章被收录于专栏:SmartSiSmartSi
运行总次数:0
代码可运行

1. watermark

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

支持事件时间的流处理器需要一种方法来衡量事件时间的进度。例如,一个构建小时窗口的窗口算子(operator),当事件时间超过一小时末尾时需要告知窗口算子,以便算子可以关闭正在进行的窗口。

事件时间可以独立于处理时间来运行。例如,在一个程序中,算子的当前事件时间可以略微落后于处理时间(考虑到接收事件的延迟),而两者以相同的速度继续运行。另一方面,另一个流式处理程序处理几个星期的事件时间只需几秒钟就可以,通过快速浏览缓存在Kafka Topic中历史数据。

Flink中测量事件时间进度的机制是watermarkswatermarks会作为数据流的一部分进行流动,并带有一个时间戳tWatermark(t)表示数据流中的事件时间已达到时间t,意思就是说数据流之后不再有时间戳t‘<= t的元素(即带时间戳的事件老于或等于watermark)。

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

watermark对于乱序数据流至关重要,如下图所示,事件并未按照时间戳进行排序。通常,watermark表示在数据流中那个时刻小于时间戳的所有事件都已经到达。一旦watermark到达算子,算子就可以将其内部的事件时间提到watermark的那个值。

2. 数据流中的并行Watermarks

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

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

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

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

3. 延迟元素

某些元素可能违反watermarks条件,这意味着即使出现watermarks(t),但是还是会出现很多的时间戳t'<= t的元素。事实上,在现实世界中,某些元素可能被任意地延迟,因此指定一个时间,带有事件时间戳的所有事件在此之前出现是不可能的。此外,即使延迟时间是有限制的,也不希望延迟太多的watermarks,因为它会在事件时间窗口的评估中导致太多的延迟。

因此,流处理程序中可能会明确的知道会有延迟元素。延迟元素是那些系统事件时钟(由watermark所示)已经超过了延迟元素的时间戳的那些元素。有关如何处理事件时间窗口中的延迟元素的更多信息,请参阅Allowed Lateness

4. 调试Watermarks

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

备注:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Flink版本:1.4
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2022年Flink面试题整理
Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。并且 Flink 提供了数据分布、容错机制以及资源管理等核心功能。Flink提供了诸多高抽象层的API以便用户编写分布式任务: DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。 DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作,支持Java和Scala。 Table API,对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过类SQL的DSL对关系表进行各种查询操作,支持Java和Scala。 此外,Flink 还针对特定的应用领域提供了领域库,例如: Flink ML,Flink 的机器学习库,提供了机器学习Pipelines API并实现了多种机器学习算法。 Gelly,Flink 的图计算库,提供了图计算的相关API及多种图计算算法实现。
Maynor
2022/03/28
2.7K0
Flink核心概念之时间流式处理
含有时间的流处理是有状态流处理的扩展,其中时间在计算中起一定作用。 除其他外,当您进行时间序列分析、基于特定时间段(通常称为窗口)进行聚合时,或者在事件发生的时间很重要的情况下进行事件处理时,就会出现这种情况。
从大数据到人工智能
2022/02/01
9770
Flink核心概念之时间流式处理
Flink时间语义、Event Time和Watermark机制深度解析
在流处理中,时间是一个非常核心的概念,是整个系统的基石。比如,我们经常会遇到这样的需求:给定一个时间窗口,比如一个小时,统计时间窗口的内数据指标。那如何界定哪些数据将进入这个窗口呢?在窗口的定义之前,首先需要确定一个应用使用什么样的时间语义。
PP鲁
2020/01/14
3.5K0
Flink时间语义、Event Time和Watermark机制深度解析
Flink系列之时间
一,fink支持的时间 Flink的流式应用支持不同的时间观。 1,处理时间 处理时间是指执行相应操作的机器的系统时间。 当流程序采用处理时间运行时,所有基于时间的操作(如时间窗口)将使用运行各自运算符的机器的系统时钟。例如,每小时处理时间窗口将包括在系统时钟显示一个小时的时间之间到达特定操作之间的所有记录。 处理时间是最简单的时间概念,不需要流和机器之间的协调。它提供最好的性能和最低的延迟。然而,在分布式和异步环境中,处理时间不能提供决定论,因为它易受记录到达系统(例如从消息队列)到达的速度的影响,也与记
Spark学习技巧
2018/01/31
1.8K0
Flink系列之时间
Flink 如何现实新的流处理应用第一部分:事件时间与无序处理
流数据处理正处于蓬勃发展中,可以提供更实时的数据以实现更好的数据洞察,同时从数据中进行分析的流程更加简化。在现实世界中数据生产是一个连续不断的过程(例如,Web服务器日志,移动应用程序中的用户活跃,数据库事务或者传感器读取的数据)。正如其他人所指出的,到目前为止,大部分数据架构都是建立在数据是有限的、静态的这样的基本假设之上。为了缩减连续数据生产和旧”批处理”系统局限性之间的这一根本差距,引入了复杂而脆弱(fragile)的端到端管道。现代流处理技术通过以现实世界事件产生的形式对数据进行建模和处理,从而减轻了对复杂解决方案的依赖。
smartsi
2022/01/18
9510
Flink 如何现实新的流处理应用第一部分:事件时间与无序处理
[白话解析] Flink的Watermark机制
对于Flink来说,Watermark是个很难绕过去的概念。本文将从整体的思路上来说,运用感性直觉的思考来帮大家梳理Watermark概念。
罗西的思考
2020/09/07
5.7K1
Flink1.4 事件时间与处理时间
Processing Time(处理时间)是指执行相应操作机器的系统时间(Processing time refers to the system time of the machine that is executing the respective operation.)。
smartsi
2019/08/07
1.7K0
Flink学习笔记
流式计算是大数据计算的痛点,第1代实时计算引擎Storm对Exactly Once 语义和窗口支持较弱,使用的场景有限且无法支持高吞吐计算;Spark Streaming 采用“微批处理”模拟流计算,在窗口设置很小的场景中有性能瓶颈,Spark 本身也在尝试连续执行模式(Continuous Processing),但进展缓慢。
数据社
2021/01/08
9740
Flink学习笔记
Flink学习——时间概念与Watermark
对于流式处理,最大的特点是数据上具有时间的属性特征,Flink根据时间产生的不同位置分为三个时间概念:
俺也想起舞
2021/03/18
2.7K0
零基础学Flink:Window & Watermark
在上一篇文章中,我们学习了flink的时间。 本文我们来一起研究下 window 和 watermark 。
麒思妙想
2020/07/10
9090
零基础学Flink:Window & Watermark
Flink1.4 内置的时间戳提取器和Watermark生成器
如Flink1.4 生成时间戳与Watermarks所介绍的,Flink提供了一个抽象类,允许程序员可以分配自己的时间戳并发送Watermark。更具体地说,可以通过AssignerWithPeriodicWatermarks或AssignerWithPunctuatedWatermarks接口来实现,具体实现取决于用户具体情况。第一个接口将周期性的发送Watermark,第二个则基于传入记录的某些属性发送Watermark,例如,当在流中遇到特殊元素时。
smartsi
2019/08/07
1.2K0
Flink 内部原理之编程模型
(1) 最低级别的抽象只是提供有状态的数据流。通过Process Function集成到DataStream API中。它允许用户不受限制的处理来自一个或多个数据流的事件,并可以使用一致的容错状态(consistent fault tolerant state)。另外,用户可以注册事件时间和处理时间的回调函数,允许程序实现复杂的计算。
smartsi
2019/08/07
1.6K0
学习Flink,看这篇就够了
批处理在大数据世界有着悠久的历史。早期的大数据处理基本上是批处理的天下。批处理主要操作大容量的静态数据集,并在计算过程完成之后返回结果。所以批处理面对的数据集通常具有以下特征:
saintyyu
2021/11/22
3.2K1
学习Flink,看这篇就够了
【Flink】超详细Window机制……
1)Tumble Count Window:累积固定个数的元素就视为一个窗口,该类型的窗口无法像时间窗口一样事先切分好。
857技术社区
2022/05/17
1.4K0
【Flink】超详细Window机制……
Flink 轻松理解Watermark
当我们第一次使用 Flink 时,可能会对 Watermark 感到困惑,其实 Watermark 并不复杂。让我们通过一个简单的例子来说明为什么我们需要 Watermark,以及它是如何工作的。
smartsi
2019/08/07
2.4K0
Flink 轻松理解Watermark
Flink 入门教程
大数据是近些年才出现的吗,人们是近些年才发现大数据的利用价值的吗?其实不然,早在几十年前,数学分析就已经涉猎金融行业了,人们依托于金融和数学知识来建立数学模型,利用金融市场所产的数据来预测金融市场产品收益同风险波动的关系。 到如今,互联网也发展了好些年了,越来越多的数据产生(用户浏览数据、搜索记录、出行记录、消费记录;农作物的成长观察记录;病人的医疗记录等),各行业也开始慢慢的重视起这些数据记录,希望通过对这些数据的分析处理从而得到相应的利益和研究价值。
全栈程序员站长
2022/07/21
9620
Flink 入门教程
Flink1.4 生成时间戳与Watermarks
本节适用于在事件时间上运行的程序。有关事件时间,处理时间和提取时间的介绍,请参阅Flink1.4 事件时间与处理时间。
smartsi
2019/08/07
2.2K0
Flink 内部原理之数据流容错
Apache Flink提供了一个容错机制来持续恢复数据流应用程序的状态。该机制确保即使在出现故障的情况下,程序的状态也将最终反映每条记录来自数据流严格一次exactly once。 请注意,有一个开关可以降级为保证至少一次(least once)(如下所述)。
smartsi
2019/08/07
9680
Flink 极简教程: 架构及原理 Apache Flink® — Stateful Computations over Data Streams
Apache Flink 是一个分布式流计算引擎,用于在无边界和有边界数据流上进行有状态的计算。
一个会写诗的程序员
2022/01/04
3.4K0
Flink 极简教程: 架构及原理 Apache Flink® — Stateful Computations over Data Streams
不懂watermark?来吧~
首先,拿基于窗口的计算来说吧,窗口的大小 size和滑动间隔 slide,都是基于时间维度处理的,像Spark Streaming就是基于处理时间,也即是处理任务所在机器的本地时间,用这个时间处理数据我们自然无法关注事件是否在时间维度上乱序,是否是滞后数据,那么为了保证数据有序和处理滞后数据就不能用处理时间进行处理。
Spark学习技巧
2019/05/09
9090
不懂watermark?来吧~
相关推荐
2022年Flink面试题整理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验