Flink之时间语义

news2025/1/16 16:38:26

Flink之时间语义

简介

Flink中时间语义可以说是最重要的一个概念了,这里就说一下关于时间语义的机制,我们下看一下下面的表格,简单了解一下

时间定义
processing time处理时间,也就是现实世界的时间,或者说代码执行时,服务器的时间
event time事件时间,就是事件数据中所带的时间(业务意义上的时间),和现实世界中的时间无关,只以数据中所带的时间为准
ingestion time注入时间,也就是数据进入到Flink系统中最开始的那个时间,这个没什么用处.开发中使用的基本就是处理时间和事件时间.

通过表格中的内容我们对这三类时间代表的内容应该都清楚了,后面会先介绍一下时间语义的执行机制和对应的API使用.

机制

推进时间

何为"时间标记",其实这里说的"时间标记"就是Flink中的WaterMark,是由于Operator[算子]中的定时器决定的,我们先看下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lpODY22p-1692338649652)(/Users/jinlong/data/Typora_WorkSpase/FlinkTImeSemantics/time1.png)]

图中我们是以event time为例子的,这样更便于理解

  1. 当数据从Mysql过来时,Operator中的定时器会先判断事件数据中所带的时间戳的大小
  2. 当得知事件数据中的时间戳是截止目前为止的最大时间戳时,会和时间标记进行比较,其实也就是和WaterMark进行比较,发现大于WaterMark时,就会将时间戳进行更换,如果小于怎么办?小于就证明这一条数据时迟到的数据,就会被抛弃(这是发生在1对1的情况下).
  3. 当时间标记更换完成后,就会将这个事件标记发送给下游算子.

推进时间选择

上面我们讲到了当时间标记更新完成后会发送给下游算子,试想一下如果下游的某个subtask接收的数据是上游的两个subtask发送来的数据时,且两条数据中的时间戳不同该怎么办?请看下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0sZu7OCS-1692338649652)(/Users/jinlong/data/Typora_WorkSpase/FlinkTImeSemantics/time2.png)]

  1. Operator(subtask)这个算子实例,接收到了来自上游的两个推进时间300700
  2. 接收到之后首先判断出两个上游发送来的推进时间中的最小值,在图中也就是300
  3. 判断出最小推进时间后,再和算子实例中存在的推进时间进行比较,如果大于当前算子实例中的推进时间则进行替换
  4. 更新算子实例中的推进时间后,继续发送给下游

迟到数据

前面讲到了关于推进时间的更换和推进时间的选择,这里讲一下Flink中的迟到数据,什么是迟到数据?就是字面意思,来晚了.

比如说某个算子实例中的推进时间是1000,但是来了一条数据的时间是500,怎么办?这条数据会被舍弃掉,在使用Flink的时候我们要牢记一点未来尚可努力,过去不可更改,Flink中的时间线和现实世界中的时间线是一样的,只会推进永远不会回退,顶多在Flink中的时间可以暂停,但是一定一定是不可以回退的.

请看下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GnS6bAHg-1692338649653)(/Users/jinlong/data/Typora_WorkSpase/FlinkTImeSemantics/time3.png)]

  1. 首先当前算子实例还是会对推进时间进行判断,获取最新的推进时间(800)
  2. 当判断出推进时间为800时得知500~1000这个窗口还没有结束(窗口都是前闭后开)
  3. 接收上游发送来的数据,根据数据中的事件时间将其发送到不同的桶中,如800900的数据都符合当前桶(500~1000)的时间区间,那么就会将该数据分配到当前桶中,直到推进时间更新到1000时则开始计算当前桶中的数据
  4. 如果发现数据中的事件时间超出当前桶的时间区间,则会根据该数据中的时间时间划分未来桶,如10001200都属于1000~1500这个时间区间,假如这时来了一条1500 <= data < 2000的数据,这时又会划分出一个新的未来中,未来桶中的数据只要还没开始计算,就会一直这样划分下去.
  5. 700的数据来时,发现时间时间700小于当前算子实例中的推进时间800,则将700的数据抛弃, 虽然700的数据在500~1000的区间,但是时间遵循不可回退的原则,所以该条数据必然会被抛弃
  6. 将推进时间和计算完成的数据继续发往下游算子实例

推进时间暂停(即停止更新)

在Flink实时计算中还会出现一种情况,就是前面提到的,虽然时间不可回退,但是在Flink中可能会出现推进时间暂停的情况,这里就对这种情况进行说明,请看下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HSnRCyjo-1692338649653)(/Users/jinlong/data/Typora_WorkSpase/FlinkTImeSemantics/time4.png)]

  1. 同样下游的算子实例在选择推进时间时,会选择两个上游算子实例发来的推进时间中较小的那一个作为更新当前算子实例中的推进时间依据
  2. 通过上图可知WaterMak800的这个算子实例不再有新的WaterMark发送过来,所以对于下游的算子实例来说,不管另一个持续发送WaterMark的算子实例时间推进到哪里都没有作用了,也就是对于下游的算子实例时间已经暂停在800
  3. 当下游的算子实例时间暂停后,上游其中一个算子实例还在源源不断的发送WaterMark和数据,这时在下游的算子实例的窗口中就会根据数据中的事件时间以500为一个区间不断地构建一个一个的未来桶,将这些数据先放起来
  4. 发生这种情况时,如果时间过长就可能会导致程序崩溃报错,那么是否有解决方式呢?当然是有的,在Flink中为我们提供了一种机制watermark-idle-timeout,这个机制的作用是什么呢?当侦测到某一个支线一直没有数据进来,并且超过了watermark-idle-timeout设置的时间(比如说是2s),那么这个机制就会将推进时间往前推进2s,也就是说当我们将这个机制设置为2s时,那等待某个一直没有来数据支线的时间就是2s,到达2s这个临界值时就会自动更新推进时间

关于时间语义的机制大概就这些内容了,如有不对欢迎指正,如有问题共同探讨.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/896637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LSTM模型

目录 LSTM模型 LSTM结构图 LSTM的核心思想 细胞状态 遗忘门 输入门 输出门 RNN模型 LRNN LSTM模型 什么是LSTM模型 LSTM (Long Short-Term Memory)也称长短时记忆结构,它是传统RNN的变体,与经典RNN相比能够有效捕捉长序列之间的语义关联,缓解梯度消失或爆炸现象.同时LS…

iOS自定义下拉刷新控件

自定义下拉刷新控件 概述 用了很多的别人的下拉刷新控件&#xff0c;想写一个玩玩&#xff0c;自定义一个在使用的时候也会比较有意思。使应用更加的灵动一些&#xff0c;毕竟谁不喜欢各种动画恰到好处的应用呢。 使用方式如下&#xff1a; tableview.refreshControl XRef…

【CTF-web】buuctf-[CISCN2019 华北赛区 Day2 Web1]Hack World(sql盲注)

题目链接 根据上图可知&#xff0c;页面中已经告诉我们要从flag表中的flag列取出flag&#xff0c;思考是sql注入。经过抓包发现发post包中的id字段是注入点。 经测试当输入id1时&#xff0c;结果为Hello, glzjin wants a girlfriend.&#xff0c;当id2时&#xff0c;结果为Do y…

Azure共享映像库构建VM镜像

什么是Azure共享映像库 Azure共享映像库是一项在Microsoft Azure中以共享方式存储和管理映像的服务。映像是预配置的虚拟机操作系统和应用程序的快照&#xff0c;可以用来创建多个虚拟机实例。通过将映像存储在共享映像库中&#xff0c;用户可以轻松地共享映像给其他Azure订阅…

MES管理系统如何帮助制造企业打造透明化工厂

在制造型企业的运营中&#xff0c;车间现场管理至关重要。然而&#xff0c;面临着信息传递速度慢、跨部门协作困难、生产进度无法及时掌握、制造品质不良、设备故障不能及时处理等困境&#xff0c;企业需要寻求有效的解决方案。MES生产管理系统作为针对制造企业车间生产过程控制…

REC 系列 Visual Grounding with Transformers 论文阅读笔记

REC 系列 Visual Grounding with Transformers 论文阅读笔记 一、Abstract二、引言三、相关工作3.1 视觉定位3.2 视觉 Transformer 四、方法4.1 基础的视觉和文本编码器4.2 定位编码器自注意力的文本分支文本引导自注意力的视觉分支 4.3 定位解码器定位 query 自注意力编码器-解…

教你手机摄影要知道的技巧

手机摄影已经成为人们记录生活、分享瞬间的重要方式之一。随着手机摄像头技术的不断提升&#xff0c;我们每个人都有机会成为优秀的手机摄影师。然而&#xff0c;要想在手机摄影领域脱颖而出&#xff0c;掌握一些关键的技巧是必不可少的。 1. 了解你的手机摄像头&#xff1a; …

使用percona-xtrabackup备份MySQL数据

xtrabackup备份分为两种 本文参考链接1 本文参考链接2 全量备份 1.备份数据 要创建备份&#xff0c;请xtrabackup使用xtrabackup --backup option. 您还需要指定一个xtrabackup --target-dir选项&#xff0c;即备份的存储位置&#xff0c;如果InnoDB数据或日志文件未存储在同…

Electron入门,项目启动。

electron 简单介绍&#xff1a; 实现&#xff1a;HTML/CSS/JS桌面程序&#xff0c;搭建跨平台桌面应用。 electron 官方文档&#xff1a; [https://electronjs.org/docs] 本文是基于以下2篇文章且自行实践过的&#xff0c;可行性真实有效。 文章1&#xff1a; https://www.cnbl…

Tomcat 为什么要破坏 Java 双亲委派机制?

大家好&#xff0c;我是锋哥!&#xff01; 我们分为4个部分来探讨: 什么是类加载机制&#xff1f;什么是双亲委任模型&#xff1f;如何破坏双亲委任模型&#xff1f;Tomcat 的类加载器是怎么设计的&#xff1f; 我想&#xff0c;在研究tomcat 类加载之前&#xff0c;我们复习…

java+springboot+mysql银行管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的银行管理系统&#xff0c;系统包含超级管理员、管理员、客户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff1b;客户管理&#xff1b;卡号管理&#xff08;存款、取款、转账&#xff09…

自动化安装系统(三)

Cobbler 简介 Cobbler是一款Linux生态的自动化运维工具&#xff0c;基于Python2开发&#xff0c;用于自动化批量部署安装操作系 统&#xff1b;其提供基于CLI的管理方式和WEB配置界面&#xff0c;其中WEB配置界面是基于Python2和Django框架开发。另外&#xff0c;cobbler还提…

Go语言基础之运算符

运算符用于在程序运行时执行数学或逻辑运算。 运算符 Go 语言内置的运算符有&#xff1a; 算术运算符关系运算符逻辑运算符位运算符赋值运算符

【Java】Spring——Bean对象的作用域和生命周期

文章目录 前言一、引出Bean对象的作用域1.普通变量的作用域2.Bean对象的作用域 二、Bean对象的作用域1.Bean对象的6种作用域2.设置Bean对象的作用域 三、Bean对象的生命周期总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也…

window安裝python2.7.0

官网下载安装 https://www.python.org/downloads/release/python-270/ 选中所有用户&#xff0c;然后点击next 切换安装位置&#xff0c;最好不要选择c盘 点击next 等待安装 安装完成 配置环境变量 将python安装路径添加到系统环境变量 cmd窗口输入python,会打开应用商…

unity Dropdown默认选择不选择任何选项

当我们使用Dropdown下拉框时&#xff0c;有时不需要有默认选项&#xff0c;把 value设置为-1就可以了&#xff0c; 但是用代码设置value-1是没有效果的&#xff0c;

Stochastic: Distribution-Expectation-Inequalities

见&#xff1a;https://www.math.hkust.edu.hk/~makchen/MATH5411/Chap1Sec2.pdf

创意灵感网站都有哪些?推荐这8个

设计师最痛苦的事情不是&#xff1a;改变草稿&#xff01;加班吧&#xff01;但创造力已经耗尽&#xff0c;没有灵感。对于创意设计师来说&#xff0c;浏览创意网站是寻找灵感创意的关键途径。但当你寻找灵感和创造力时&#xff0c;你会发现一些著名的创意网站只是展示了热门图…

利用console提高写bug的效率

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 自从入坑前端后&#xff0c;日常写bug就没离开过console。 要说用得多&#xff0c;不如说是console.log用得多&#xff0c;console.warn和console.erro…

msvcp140dll下载方法,msvcp140dll丢失的修复教程

msvcp140.dll是Microsoft Visual C Redistributable组件中的一个动态链接库文件。它是Microsoft Visual C 2015版本和更高版本所需的一个重要文件。这个文件主要用于支持C编译的应用程序&#xff0c;以提供与C相关的函数和功能。 为了解决msvcp140.dll文件丢失或损坏的问题&am…