首页 > 其他分享 >Flink时间和水印

Flink时间和水印

时间:2024-06-15 15:55:55浏览次数:20  
标签:元素 窗口 处理 Flink 水印 时间 事件

及时流处理#
介绍#
及时流处理是有状态流处理其中时间在计算中起了一些作用。在进行时间序列分析时,基于特定时间段(通常称为窗口)进行聚合时,或者在事件发生时间非常重要的情况下进行事件处理时,都会出现这种情况。

在接下来的章节中,我们将重点介绍在使用适时Flink应用程序时应该考虑的一些主题。

返回页首

时间的概念:事件时间和处理时间#
当提到流程序中的时间时(例如定义窗口),人们可以提到不同的概念时间:

处理时间:处理时间是指执行相应操作的机器的系统时间。

当串流程序在处理时间运行时,所有基于时间的操作(如时间窗口)都将使用运行相应操作符的机器的系统时钟。每小时处理时间窗口将包括在系统时钟指示整小时的时间间隔内到达特定操作员的所有记录。例如,如果应用程序在上午9:15开始运行,则第一个每小时处理时间窗口将包括上午9:15到10:00之间处理的事件,下一个窗口将包括上午10:00到11:00之间处理的事件,依此类推。

处理时间是最简单的时间概念,不需要流和机器之间的协调。它提供最佳性能和最低延迟。但是,在分布式和异步环境中,处理时间并不具有确定性,因为它容易受到记录到达系统的速度(例如从消息队列)、记录在系统内部操作员之间流动的速度以及停机(计划的或其他方式)的影响。

活动时间:事件时间是每个单独事件在其产生设备上发生的时间。该时间通常在记录进入Flink之前嵌入记录中事件时间戳可以从每个记录中提取。在事件时间中,时间的进展取决于数据,而不是任何挂钟。事件时间程序必须指定如何生成事件时间水印,这是在事件时间内发出进度信号的机制。这种水印机制将在后面的章节中描述,在下面.

在理想情况下,事件时间处理将产生完全一致和确定的结果,而不管事件何时到达或它们的顺序如何。但是,除非已知事件按顺序到达(通过时间戳),否则事件时间处理在等待无序事件时会产生一些延迟。由于只能等待一段有限的时间,这限制了事件时间应用程序的确定性。

假设所有数据都已到达,事件时间操作将按预期运行,即使在处理无序或延迟事件时,或者在重新处理历史数据时,也会产生正确和一致的结果。例如,每小时事件时间窗口将包含事件时间戳在该小时内的所有记录,而不管它们到达的顺序或处理时间。(请参见迟了解更多信息。)

请注意,有时当事件时间程序实时处理实时数据时,它们会使用一些处理时间操作,以保证它们及时进行。

Event Time and Processing Time
返回页首

事件时间和水印#
注意:Flink实现了数据流模型中的许多技术。有关事件时间和水印的详细介绍,请查看下面的文章。

流媒体101泰勒·阿基多
这数据流模型纸
一种流处理器,支持事件时间需要一种方法来测量事件时间的进度。例如,构建每小时窗口的窗口操作员需要在事件时间超过一小时结束时得到通知,以便操作员可以关闭正在进行的窗口。

事件时间可以独立于处理时间(通过挂钟测量)。例如,在一个程序中,当前事件时间运算符的可能稍微落后于处理时间(考虑到接收事件的延迟),同时两者以相同的速度进行。另一方面,另一个流程序可能通过快进Kafka主题(或另一个消息队列)中已经缓冲的一些历史数据,在几秒钟的处理时间内处理数周的事件。

Flink中衡量事件时间进度的机制是水印。水印作为数据流的一部分流动并带有时间戳t。A水印声明事件时间已到t这意味着流中不应该再有带有时间戳的元素t‘《= t(即时间戳早于或等于水印的事件)。

下图显示了带有(逻辑)时间戳和水印的事件流。在这个例子中,事件是有序的(相对于它们的时间戳),这意味着水印只是流中的周期性标记。

A data stream with events (in order) and watermarks
水印对于以下方面至关重要无序的如下图所示,流中的事件不是按时间戳排序的。一般来说,水印是一种声明,表明在流中的该点之前,直到某个时间戳的所有事件都应该已经到达。一旦水印到达操作者,操作者可以推进其内部事件时钟水印的值。

A data stream with events (out of order) and watermarks
请注意,事件时间是由新创建的流元素(或多个元素)从产生它们的事件或触发这些元素创建的水印中继承的。

并行流中的水印#
水印是在源函数处或直接在源函数之后生成的。源函数的每个并行子任务通常独立生成水印。这些水印定义了特定并行源的事件时间。

当水印流经流媒体程序时,它们会提前到达运营商处的事件时间。每当一个操作符提前其事件时间时,它都会为其后续操作符生成一个新的下游水印。

一些操作符消耗多个输入流;例如,一个联合,或者跟在键盘侠(…)或者分区(…)功能。这种操作符的当前事件时间是其输入流事件时间的最小值。随着输入流更新事件时间,操作符也会更新。

下图显示了流经并行流的事件和水印以及跟踪事件时间的操作员的示例。

Parallel data streams and operators with events and watermarks
迟#
某些元素可能会违反水印条件,这意味着即使在水印已发生,更多元素带有时间戳t‘《= t会发生。事实上,在许多现实世界的设置中,某些元素可以被任意延迟,这使得不可能指定某个事件时间戳的所有元素都将发生的时间。此外,即使可以限制延迟,将水印延迟太多通常也是不可取的,因为这会在事件时间窗口的评估中造成太多延迟。

出于这个原因,流媒体程序可能会明确地期待一些晚元素。延迟元素是在系统的事件时钟(由水印指示)已经超过延迟元素的时间戳时间之后到达的元素。看见允许迟到有关如何在事件时间窗口中使用晚期元素的更多信息。

开窗术#
聚合事件(例如计数、求和)在流上的工作方式不同于批处理。例如,不可能计算一个流中的所有元素,因为流通常是无限的(无界的)。相反,流上的聚合(计数、总和等)的范围是窗子,比如“计算过去5分钟的时间“,或者“最后100个元素的总和“.

窗户可以是时间驱动(例如:每30秒)或数据驱动(例如:每100个元素)。人们通常区分不同类型的窗口,例如翻滚的窗户(无重叠),滑动窗口(有重叠),以及会话窗口(中间有一段不活动的间隙)。

Time- and Count Windows

标签:元素,窗口,处理,Flink,水印,时间,事件
From: https://www.cnblogs.com/huft/p/18249376

相关文章

  • Day.js日期时间的常计算
    Day.js日期时间的常计算1、介绍Day.js:Day.js是一个极简的JavaScript库,可以为现代浏览器解析、验证、操作和显示日期和时间。主要为操作时间日期的库。2、场景使用计算周几、当月第一天计算xx天前/后的日期将时间戳转换为日期(YYYY-MM-DD)计算月天数获取两个日期的时间差3、使用例......
  • Flink有状态流处理 未对齐barrier性能好
    有状态流处理#什么是状态?#虽然数据流中的许多操作只是查看一个个体一次事件(例如事件解析器),有些操作会记住多个事件的信息(例如窗口操作符)。这些操作被称为宏伟威严的.有状态操作的一些例子:当应用程序搜索某些事件模式时,状态将存储到目前为止遇到的事件序列。当聚合每分钟......
  • CPU 时间片轮转机制
    CPU时间片轮转机制我们平时在开发的时候,感觉并没有受cpu核心数的限制,想启动线程就启动线程,哪怕是在单核CPU上,为什么?这是因为操作系统提供了一种CPU时间片轮转机制。时间片轮转调度是一种最古老、最简单、最公平且使用最广的算法,又称RR调度。每个进程被分配一个时间段,......
  • Flink快照容错处理
    通过状态快照实现容错处理#StateBackends#由Flink管理的keyedstate是一种分片的键/值存储,每个keyedstate的工作副本都保存在负责该键的taskmanager本地中。另外,Operatorstate也保存在机器节点本地。Flink定期获取所有状态的快照,并将这些快照复制到持久化的位置,......
  • Flink API
    Flink中的API#Flink为流式/批式处理应用程序的开发提供了不同级别的抽象。ProgramminglevelsofabstractionFlinkAPI最底层的抽象为有状态实时流处理。其抽象实现是ProcessFunction,并且ProcessFunction被Flink框架集成到了DataStreamAPI中来为我们使用。它允......
  • 年薪 80W!大厂掀起 AIGC 人才大战,普通打工人应该怎么做?| 极客时间
    今日理性探讨:AI大模型的发展,对普通打工人到底有什么影响?毕竟这几个月,多少有点信息焦虑——什么《有人已经用GPT赚了百万,你还不上车吗?》、“AIGC磨刀霍霍,所到之处,裁员者众”、“大厂使用AI力量优化人员配置”…确实,大模型来势汹汹,阿里、科大讯飞、字节、华为…越......
  • android studio 启动虚拟机长时间无响应,无法启动(二)
    书接上回,MAC更新到11.0需要40GB,但是我的电脑一共120GB,系统内存占了70GB,更新完MAC是剩不下空间了,因此不选择更新版本,重新安装了较低版本的AndroidstudioAndroidstudio官网又出现了新的问题。。。问题PANIC:BrokenAVDsystempath.CheckyourANDROID_SDK_ROOTvalu......
  • SOFTS: 时间序列预测的最新模型以及Python使用示例
    近年来,深度学习一直在时间序列预测中追赶着提升树模型,其中新的架构已经逐渐为最先进的性能设定了新的标准。这一切都始于2020年的N-BEATS,然后是2022年的NHITS。2023年,PatchTST和TSMixer被提出,最近的iTransformer进一步提高了深度学习预测模型的性能。这是2024年4月《SOFTS:Effi......
  • 【2024】 python下载快手无水印去水印视频
    无水印视频下载#coding=utf-8importrequestsimportreimportjson##url分享短视频链接#defdownload(url):headers={'User-Agent':util.window_user_agent}#获取短连接码sub=re.findall('https://v.kuaishou.com/\w{6}',......
  • # android studio启动虚拟机长时间无响应,无法启动
    问题虚拟设备长时间不响应,无法启动设备方案根据androidstudio启动虚拟器失败尝试删除锁文件失败,.android目录下不存在锁文件电脑内存或计算配置不足查看了模拟器需要的内存,我的电脑还有10GB,应该是绰绰有余模拟器版本不对重新下载了30版本的,依然不响应,真......