Flink之Watermark

1.乱序问题

流处理从事件产生,到流经source,再到operator,中间是有一个过程和时间的,虽然大部分情况下,流到operator的数据都是按照事件产生的时间顺序来的,但是也不排除由于网络、分布式等原因,导致乱序的产生,所谓乱序,就是指Flink接收到的事件的先后顺序不是严格按照事件的Event Time顺序排列的。

一旦出现乱序,如果只根据eventTime决定window的运行,我们不能明确数据是否全部到位,但又不能无限期的等下去,此时必须要有个机制来保证一个特定的时间后,必须触发window去进行计算了,这个特别的机制,就是Watermark。

例如:某App会记录用户的所有点击行为,并回传日志(在网络不好的情况下,先保存在本地,延后回传)。A用户在11:02对App进行操作,B用户在11:03对App进行操作,但是A用户的网络不太稳定,回传日志延迟了,导致我们在服务端先接受到B用户11:03的消息,然后再接受到A用户11:02的消息,消息乱序了。

2.什么是Watermark

Watermark是Apache Flink提出的一种用来解决乱序、延迟数据等情况的解决方案。

它是建立在事件时间上的一个概念,用来刻画数据流的完整性。如果按照处理时间来衡量事件,一切都是有序的、完美的,自然而然也就不需要Watermark了。换句话说事件时间带来了乱序的问题,而Watermark就是用来解决乱序问题。所谓的乱序,其实就是有事件延迟了,对于延迟的元素,我们不可能无限期的等下去,必须要有一种机制来保证一个特定的时间后,必须触发Window进行计算。这个特别的机制,就是Watermark,它告诉了算子延迟到达的消息不应该再被接收。

watermrk具体特点如下:

  • Watermark是一种衡量Event Time进展的机制。
  • Watermark是用于处理乱序事件的,通常用Watermark机制结合window来实现。
  • 数据流中的Watermark用于表示timestamp小于Watermark的数据,都已经到达了,因此,window的执行也是由Watermark触发的。
  • Watermark可以理解成一个延迟触发机制,我们可以设置Watermark的延时时长t,每次系统会校验已经到达的数据中最大的maxEventTime,然后认定eventTime小于maxEventTime - t的所有数据都已经到达,如果有窗口的停止时间等于maxEventTime – t,那么这个窗口被触发执行。
  • watermark 用来让程序自己平衡延迟和结果正确性。

3.Watermark原理

Watermark会携带一个单调递增的时间戳t,Watermark(t)表示所有时间戳不大于t的数据都已经到来了,未来小于等于t的数据不会再来,因此可以放心地触发和销毁窗口了。

当Flink,接收到数据时,会按照一定的规则去生成Watermark,这条Watermark就等于当前所有到达数据中的maExertT me"-延N时长,也就定说,Watermark是基于数据携带的时间戳生成的,一旦Watermark比当前未触发的窗口的停止时间要晚,那么就会触发相应窗口的执行。由于eventtime是由数据携带的,因此,如果运行过程中无法获取新的数据,那么没有被触发的窗口将永远都不被触发。

4.延迟数据处理机制

Watermark能够应对乱序的数据,但是真实世界中没法得到一个完美的 Watermark数值。要么没法获取到,要么耗费太大,因此实际工作中会近似 Watermark(t)之后,还有较小的概率接收到时间戳t之前的数据,在Flink中将这些数据定义为“late elements”,可以在Window中指定允许延迟的最大时间(默认为О)。

延迟事件是乱序事件的特例,和一般乱序事件不同的是它们的乱序程度超出了水位线( Watermark)的预计,导致窗口在它们到达之前已经关闭。

延迟事件出现时窗口已经关闭并产出了计算结果,对于此种情况处理的方法有3种:

  • 重新激活已经关闭的窗口并重新计算以修正结果。
  • 将延迟事件收集起来另外处理。
  • 将延迟事件视为错误消息并丢弃。

Flink默认的处理方式是第3种直接丢弃,其他两种方式分别使用Side Output和AllowedLateness。

  • Side Output机制:将延迟事件单独放入一个数据流分支,这会作为Window计算结果的副产品,以便用户获取并对其进行特殊处理。迟来的数据同样可以触发窗口,进行输出。
  • Allowed Lateness机制:允许用户设置一个允许的最大延迟时长。Flink会在窗口关闭后一直保存窗口的状态直至超过允许延迟时长,这期间的延迟事件不会被丢弃,而是默认会触发窗口重新计算。因为保存窗口状态需要额外内存,并且如果窗口计算使用了ProcessWindowFunction APl还可能使得每个延迟事件触发一次窗口的全量计算,代价比较大,所以允许延迟时长不宜设得太长,延迟事件也不宜过多。

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

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

相关文章

LNMT架构

所谓的LNMT架构 指的就是Linux操作系统上部署Nginx web服务器、MySQL数据库服务器、Tomcat中间件服务器 L linux N nginx M mysql T tomcat 单机部署 1,安装 apache-tomcat 2,移动目录 3,复制第二个tomcat 4,…

2、结构型设计模式

结构型设计模式 目录 结构型设计模式1. 代理模式1.1 概述1.2 结构1.3 静态代理1)抽象主题类 SellTickets2)真实主题类 TrainStation3)代理类 ProxyPoint4)客户端类 1.4 JDK 动态代理1)代理工厂类:ProxyFact…

C# 实现ComboBox下拉框控件

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System

【Terraform学习】Terraform模块基础操作(Terraform模块)

本站以分享各种运维经验和运维所需要的技能为主 《python》:python零基础入门学习 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…

Elasticsearch 7.6 - API高阶操作篇

ES 7.6 - API高阶操作篇 分片和副本索引别名添加别名查询所有别名删除别名使用别名代替索引操作代替插入代替查询 场景实操 滚动索引索引模板创建索引模板查看模板删除模板 场景实操一把索引的生命周期数据迁移APIGEO(地理)API索引准备矩形查询圆形查询多边形查询 自定义分词器…

顺序表链表OJ题(2)->【数据结构】

W...Y的主页 😊 代码仓库分享 💕 前言: 单链表的结构常常不完美,没有双向链表那么”优秀“,所以繁衍出很多OJ练习题。今天我们继续来look look数据结构习题。 下面就是OJ时间!!! …

RabbitMQ入门

1、RabbitMQ概念简介 RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。 AMQP协议模型 AMQP全称:Advanced Message Q…

亚马逊云科技 云技能孵化营 我也说ai

自从chatgpt大火以后,我也关注了人工智能方面的东西,偶尔同学推荐参加了亚马逊云科技云技能孵化营活动,免费学习了亚马逊云科技和机器学习方面的知识,还获得了小礼品,现在将活动及心得分享给大家。 活动内容&#xff…

如何使用Redis来防止穿透、击穿和雪崩问题

推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 史上最全文档AI绘画stablediffusion资料分享 AI绘画关于SD,MJ,GPT,SDXL百科全书 「java、python面试题」…

2023年8月随笔之有顾忌了

1. 回头看 日更坚持了243天。 读《发布!设计与部署稳定的分布式系统》终于更新完成 选读《SQL经典实例》也更新完成 读《高性能MySQL(第4版)》开更,但目前暂缓 读《SQL学习指南(第3版)》开更并持续更新…

Redis教程-哨兵模式

当涉及到 Redis 哨兵模式的教程时,下面是一个简要的教程,涵盖了哨兵模式的作用以及如何进行配置。 Redis 哨兵模式简介 Redis 哨兵模式是一种用于高可用性的 Redis 部署方案。它通过监控和管理 Redis 主服务器(Master)和从服务器…

XSS盲打练习(简单认识反射型、存储型XSS和cookie欺骗)

文章目录 挖掘cms网站XSS漏洞利用XSS平台盲打CMS,获取后台管理cookiecookie欺骗登录管理员账户 挖掘cms网站XSS漏洞 来到cms网站主页,发现有一个搜索框,输入任意内容后搜索,发现内容会回显,这里可能存在反射型XSS漏洞…

插座上亚马逊美国站UL1449测试报告标准

美规插座有UL498;UL1363;UL1449等标准。不同结构;不同形式使用的标准不同。UL498插座部分主要是对结构和常规性测试的要求;此类插座称为Receptacle;UL1363主要是对室内用的延长线插座的要求;此类插座常简写…

基于卷积优化算法优化的BP神经网络(预测应用) - 附代码

基于卷积优化算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于卷积优化算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.卷积优化优化BP神经网络2.1 BP神经网络参数设置2.2 卷积优化算法应用 4.测试结果:5…

LLM强势挺进端侧,AI大语言模型端侧部署如何影响超自动化?

▲ 图片由AI生成 算力资源吃紧,成本居高不下,数据隐私泄露,用户体验不佳…… 以OpenAI为代表的大语言模型爆发后,多重因素影响之下本地化部署成为LLM落地的主流模式。LLM迫切需要部署在本地设备上,围绕LLM端侧部署的…

【元宇宙】智能手机万岁

凭借出色的新设备,我们很快就能进人元字宙,想象这样的情景是很趣的。但是,至少到21世纪20年代,元宇宙时代的大多数设备很可能是我们已经在使用的设备。 AR 和 VR 设备不仅面临重大的技术、财务和体验障碍,而且它们在上…

安卓设置混淆后,gson报错解决方法

一,设置开启混淆release {minifyEnabled truezipAlignEnabled trueshrinkResources trueproguardFiles getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro } 二,混淆的文件中,对gson相关类不进行混淆,否…

Sentry 是一个开源的错误监控和日志聚合平台-- 通过docker-compose 安装Sentry

概述 Sentry 是一个开源的错误监控和日志聚合平台,用于帮助开发团队实时监控和调试应用程序中的错误和异常。它可以捕获应用程序中的错误和异常,并提供详细的错误报告,包括错误堆栈跟踪、环境信息、用户信息等。这些报告可以帮助开发团队快速…

Docker 可以共享主机的参数

命令 docker run -it --ipchost ubuntu:latest /bin/bashdocker run -it --nethost ubuntu:latest /bin/bashdocker run -it --pidhost ubuntu:latest /bin/bashdocker run -it --utshost ubuntu:latest /bin/bash 参考 Docker run reference | Docker Docs