Flink的Watermark水位线详解

一、Flink的时间语义 

        Flink有如下三种时间语义: Flink的三种时间语义-CSDN博客

        在实际应用中,一般会采用事件时间语义。而正如前面所说的,事件时间语义需要等窗口的数据全部到齐了,才能进行窗口计算。那么,什么时候数据就都到齐了呢?这里我们引入水位线的概念。

二、为什么要引入水位线?不能用数据本身带有的时间戳来驱动吗?

        如果用数据本身所带有的时间戳来进行驱动,将会面临如下问题:

(1)如果面临聚合计算,数据本身所带有时间戳也会参与聚合,则聚合之后一批数据只会输出一个结果,那么下游的数据量就会变少,进而影响时间进度控制的精细程度。

(2)数据由上游节点发往下游节点时,往往一个数据只会发往下游的一个节点(除广播外),那么不同并行子任务之间的时钟推进程度就会产生差别,从而影响计算结果。

        综上所述,我们需要将将单独的时间信息以数据的形式广播到下游的每一个并行子任务上,并且这个时钟的传递不会因为窗口的聚合计算而受到影响。解决方法就是在数据流中加入一个时钟标记:水位线。

三、水位线概念

        水位线可以看作一条特殊的数据记录,它是插入到数据流中的一个数据标识,主要内容就是一个时间戳,用来指示当前流的事件时间。它插入流中的位置,应当是某个数据到来之后,这样就可以从这个数据中提取时间戳,作为当前水位线的时间戳了。如果下游出现了多个并行子任务,应当将水位线广播出去。

四、有序流中的水位线

        在理想情况下,数据按照生成的先后顺序依次进入数据流,在处理过程中也会保持原顺序不变。在这种情况下,从每个数据中提取的时间戳一定是单调不减的,在海量数据的情况下,可能有很多数据具有相同的时间戳,那么每个数据的到来都提取时间戳、生成水位线就做了大量的无用功,即使时间戳不同,连续数据的时间戳相隔也会非常之细微,往往对计算结果没什么影响。所以为了提高效率,一般会周期性(如每隔100ms,这里的间隔时间是系统时间)生成水位线。

五、乱序流中的水位线

        在分布式系统中,数据往往是乱序的,这种情况下由于存在迟到数据,可能出现水位线回退,因此在插入新的水位线时,要先判断一下时间戳是否比之前的大,否则不再生成新的水位线。此外,考虑到大量数据同时到来时的处理效率,也可以周期性生成水位线,只需要保存之前所有数据中最大的时间戳即可,在需要生成水位线时直接以最大时间戳作为新的水位线。最后,为了等待当前窗口的迟到数据,我们应该为水位线设置一个延迟时间,即把(最大时间戳-延迟时间)作为当前水位线。

六、水位线的特性总结

(1)水位线是插入到数据流中的一个标记,可以认为是一个特殊的数据

(2)水位线的主要内容是一个时间戳,用来表示当前事件时间的进展

(3)水位线是基于数据的时间戳生成的

(4)水位线的时间戳是单调递增的,以确保任务的事件时间时钟一直向前推进

(5)水位线可以通过设置延迟,来确保正确处理乱序数据

(6)一个水位线WaterMark(t),代表在当前流中事件时间已经来到了t,这表示t之前的数据都已经到齐了。

七、水位线的传递

        在重分区的传递模式下,下游子任务会收到多个上游子任务广播来的水位线,那么应该以哪个为准呢?回忆水位线的本质:当前时间之前的所有数据都已到齐!那么应当选取最小的水位线作为当前子任务的水位线。

八、水位线总结

(1) 水位线默认默认计算公式:水位线 = 观察到的最大时间戳-延迟时间-1ms

(2) 在数据流开始之前会插入一个负无穷大的水位线,在数据流结束时会插入一个正无穷大的水位线,保证所有的窗口闭合及所有的额定时器被触发。对于离线数据集,只需这两个水位线即可。

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

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

相关文章

ES学习Promise对象(九)

这里写目录标题 一、概念二、示例基本使用使用 Promise 对象封装Ajaxthen() 方法catch() 方法 一、概念 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。Promise 是一个对象,Promise 提供统一…

Kibana:LINUX_X86_64 和 DEB_X86_64两种可选下载方式的区别

最近需要在vm(操作系统是 Ubuntu 22.04.4 LTS,代号 Jammy。这是一个基于 x86_64 架构的 Linux 发行版)上安装一个7.17.8版本的Kibana,并且不采用docker方式。 在下载的时候发现有以下两个选项,分别是 LINUX_X86_64 和 …

CMake 构建项目并整理头文件和库文件

本文将介绍如何使用 CMake 构建项目、编译生成库文件,并将头文件和库文件整理到统一的目录中以便在其他项目中使用。 1. 项目结构 假设我们正在构建一个名为 rttr 的开源库,初始的项目结构如下: D:\WorkCode\Demo\rttr-master\|- src\ …

【FAQ】HarmonyOS SDK 闭源开放能力 — Vision Kit(2)

1.问题描述: 人脸活体检测返回上一页App由沉浸式变为非沉浸式多了上下安全区域。 解决方案: 检测结束后需要自己去设置沉浸式配置。 2.问题描述: Vision Kit文字识别是本地识别,还是上传至服务器,由服务器来识别文…

AIA - IMSIC之二(附IMSIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 ​​​​​​​通过IMSIC接收外部中断的CSR 软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…

Vue单页应用的配置

前面通过几篇文章了解并掌握了 Vue 项目构建及运行的前期工作 。接下来我们可以走进 Vue 项目的内部,一探其内部配置的基本构成。 1. 路由配置 由于 Vue 这类型的框架都是以一个或多个单页构成,在单页内部跳转并不会重新渲染 HTML 文件,其路…

CocosCreator-引擎案例-TS:spine

工程1:LoadSpine:简单加载spine资源 建立工程,在层级上建立一个空对象,改名spine 在spine上添加spine组件: 添加组件>渲染组件>spine 在spine上挂上脚本loadspine onLoad () {cc.resources.load(loadSpine/ali…

使用FreeNAS软件部署ISCSI的SAN架构存储(IP-SAN)练习题

一,实验用到工具分别为: VMware虚拟机,安装教程:VMware Workstation Pro 17 安装图文教程 FreeNAS系统,安装教程:FreeNAS-11.2-U4.1安装教程2024(图文教程) 二,新建虚…

【ANGULAR网站开发】初始环境搭建

1. 初始化angular项目 1.1 创建angular项目 需要安装npm和nodejs,这边不在重新安装 直接安装最新版本的angular npm install -g angular/cli安装指定大版本的angular npm install -g angular/cli181.2 启动angular 使用idea启动 控制台启动 ng serve启动成功…

lua debug相关方法详解

lua debug相关方法详解 1. debug.debug()2. debug.getinfo(func | level [, what])3. debug.getlocal(func-or-level, localindex)4. debug.setlocal(level, local_number, value)5. debug.getupvalue(func, upvalue_index)6. debug.setupvalue(func, upvalue_index, value)7. …

《计算机网络(第7版)-谢希仁》期末考试复习题和答案(总结整理)

目录 前言: 一、选择题。 二、填空题。 三、名词解释。 四、简答题。 前言: 这个自动标题自己带了序号,一开始想全部选项和题号都改过来的,结果一看一百多个全是,懒得改了 一、选择题。 1、广域网覆盖的地理范围…

【再谈设计模式】享元模式~对象共享的优化妙手

一、引言 在软件开发过程中,我们常常面临着创建大量细粒度对象的情况,这可能会导致内存占用过高、性能下降等问题。享元模式(Flyweight Pattern)就像是一位空间管理大师,它能够在不影响功能的前提下,有效地…

Milvus×EasyAi:如何用java从零搭建人脸识别应用

如何从零搭建一个人脸识别应用?不妨试试原生Java人工智能算法:EasyAi Milvus 的组合拳。 本文将使用到的软件和工具包括: EasyAi:人脸特征向量提取Milvus:向量数据库用于高效存储和检索数据。 01. EasyAi:…

NS3学习——tcpVegas算法代码详解(2)

NS3学习——tcpVegas算法代码详解(1)-CSDN博客 目录 4.TcpVegas类中成员函数 (5) CongestionStateSet函数 (6) IncreaseWindow函数 1.检查是否启用 Vgas 2.判断是否完成了一个“Vegas 周期” 2.1--if:判断RTT样本数量是否足够 2.2--e…

GitLab 将停止为中国区用户提供服务,60天迁移期如何应对? | LeetTalk Daily

“LeetTalk Daily”,每日科技前沿,由LeetTools AI精心筛选,为您带来最新鲜、最具洞察力的科技新闻。 GitLab作为一个广受欢迎的开源代码托管平台,近期宣布将停止服务中国大陆、澳门和香港地区的用户提供服务。根据官方通知&#x…

华为实训课笔记 2024 1223-1224

华为实训 12/2312/24 12/23 [Huawei]stp enable --开启STP display stp brief --查询STP MSTID Port Role STP State Protection 实例ID 端口 端口角色 端口状态 是否开启保护[Huawei]display stp vlan xxxx --查询制定vlan的生成树计算结…

企业数字化转型中如何区分“IT投入”和“业务投入”

在数字化转型的浪潮中,企业往往面临一个关键问题:如何区分“IT投入”和“业务投入”?在很多企业中,这两个概念往往被混淆,不少公司甚至认为“数字化转型”就是“IT的事情”,但实际上,它们之间有…

【Spring AI】Spring AI Alibaba的简单使用

提示:文章最后有详细的参考文档。 前提条件 SpringBoot版本为3.x以上JDK为17以上申请api-key,地址:百炼平台 引入依赖 说明:我的springboot版本为3.2.4,spring-ai-alibaba-starter版本为1.0.0-M2.1(对应spring-ai版本…

《Java源力物语》-3.空值猎手

~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” \quad 夜色渐深,在一处偏僻小径上,月光透过浓密的源力云层,在地面上投下斑驳的光影。String正独自练习着刚从…

科技云报到:人工智能时代“三大件”:生成式AI、数据、云服务

科技云报到原创。 就像自行车、手表和缝纫机是工业时代的“三大件”。生成式AI、数据、云服务正在成为智能时代的“新三大件”。加之全球人工智能新基建加速建设,成为了人类社会数字化迁徙的助推剂,让新三大件之间的耦合越来越紧密。从物理世界到数字世…