Flink白话解析Watermark
一、摘要
如果想使用Flink,Flink的Watermark是很难绕过去的概念。本文帮大家梳理Watermark概念
二、Watermark疑问
1、Flink应用的常见需求是什么
如公司运营一个官网,想统计下过去一分钟有多少用户访问官网。
如果使用Flink开发,来一条数据则计算一条也是可以的。但是这样频繁计算是非常消耗资源的,如果想用Flink做一些复杂统计,会非常费资源。
需求中想看近一分钟的访客,这时候需要用到窗口来统计窗口内发生的事情,如统计窗口内的用户数。一分钟可以理解为Flink的窗口大小,在这一分钟统计有多少用户。
窗口的作用就是为了周期性获取数据,把传入的流数据根据时间切分成多个桶(buckets)
2、Flink使用窗口后,带来的问题
因为流式数据想要按照窗口做统计。因为网络延迟、乱序、消息积压、重试等原因可能导致客户端发送的某条数据延迟到达服务器。
如:客户端正常发送1-10,10条数据
发生乱序后服务端收到数据是:2,3,4,5,1,6,3,8,9,10,7
而处理乱序的数据,则需要用到Watermark、allowedLateness、sideOutPut技术
Watermark:为了防止数据乱序的处理机制
allowedLateness:将窗口再延迟一段时间,比如等2分钟延迟的数据,2分钟到的可以继续计算
sideOutputLateData:最后兜底操作,窗口真正关闭后,延迟数据再过来,则输出到侧输出流。侧输出流数据可以在单独处理或丢弃
数据处理流程总结:Windows--> Watermark--> allowedLateness--> sideOutputLateData
数据处理流程描述:用Windows把流数据分块处理,用Watermark确定什么时候不再等待更早的数据/触发窗口进行计算,用allowLateNess 将窗口关闭时间再延迟一段时间。用sideOutPut 最后兜底把数据导出到其他地方。
3、Watermark翻译中文应该叫啥
网络上有把Watermark叫成水印有的叫水位线,翻译平台直接翻译是水印。名字按理来说可以反应本质,而我怎么也理解不了水印本质。
按照Watermark功能应该翻译成水位线,high water mark确实可以翻译成高水位线。海水或洪水所达到的最高水位,在Flink中到达水位线(Watermark)后触发计算。
4、Watermark代码中本质是什么
Watermark本质是上是一个时间戳,一般是事件发生时间。Watermark到达后触发计算
5、Watermark如何解决问题
可以把Watermark理解为一个水位线,这个Watermark不断变化,实际上作为数据的一部分随着数据流在流动。
定义了数据延迟多久就不再等待,当Flink中的运算符接收到Watermarks时,它认为早于该时间的消息已经完全抵达计算引擎,不再等待延迟的数据。
假设一个应用是触发窗口计算的逻辑,只有水位线越过窗口对应的结束时间,窗口才会关闭并触发计算,计算该窗口内的数据。
三、窗口相关概念
详细介绍参考:https://www.cnblogs.com/robots2/p/16063157.html
1、窗口分类
翻滚窗口(Tumbling Window,无重叠)
滚动窗口(Sliding Window,有重叠)
和会话窗口,(Session Window,活动间隙)
2、窗口生命周期
窗口有个开始结束时间,比如一个窗口大小10分钟,时间区间12:00-12.10分。
客户端生产了一条12:00点的数据,则这条数据到达服务器,就会创建一个窗口。
客户端生产了一条12:11分的数据,则这条数据到达服务器,如没指定延迟时间,则这个窗口就会关闭删除。
四、Flink时间相关概念简介
Flink分了三种时间类型
1、事件时间:是客户端真实发生该事件的时间,比如用户访问官网时的真实时间,一般为时间戳表示。
2、处理时间:数据发送给服务端后,进入Flink程序时的时间,也就是Flink程序读取到该条数据的时间。
3、提取时间:Flink程序中有一个或多个算子(方法),提取时间就是该条数据进入该算子的时间。如一个程序需要过滤、分组、聚合、输出,则该时间是某一个算子处理该条数据的时间
参考文章:https://www.cnblogs.com/rossiXYZ/p/12286407.html
Flink白话解析Watermark的更多相关文章
- [白话解析] Flink的Watermark机制
[白话解析] Flink的Watermark机制 0x00 摘要 对于Flink来说,Watermark是个很难绕过去的概念.本文将从整体的思路上来说,运用感性直觉的思考来帮大家梳理Watermark ...
- 转 白话解析:一致性哈希算法 consistent hashing
摘要: 本文首先以一个经典的分布式缓存的应用场景为铺垫,在了解了这个应用场景之后,生动而又不失风趣地介绍了一致性哈希算法,同时也明确给出了一致性哈希算法的优点.存在的问题及其解决办法. 声明与致谢: ...
- flink time and watermark
流处理中时间本质上就是一个普通的递增字段(long型,自1970年算起的微秒数),不一定真的表示时间. watermark只是应对乱序的办法之一,大多是启发式的,在延迟和完整性之间抉择.(如果没有延迟 ...
- [白话解析] 深入浅出一致性Hash原理
[白话解析] 深入浅出一致性Hash原理 0x00 摘要 一致性哈希算法是分布式系统中常用的算法.但相信很多朋友都是知其然而不知其所以然.本文将尽量使用易懂的方式介绍一致性哈希原理,并且通过具体应用场 ...
- [白话解析] 深入浅出 极大似然估计 & 极大后验概率估计
[白话解析] 深入浅出极大似然估计 & 极大后验概率估计 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解 极大似然估计 & 极大后验概率估计,并且从名著中找 ...
- [白话解析] 深入浅出支持向量机(SVM)之核函数
[白话解析] 深入浅出支持向量机(SVM)之核函数 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解支持向量机中的核函数概念,并且给大家虚构了一个水浒传的例子来做进一步的通俗 ...
- [白话解析] 带你一起梳理Word2vec相关概念
[白话解析] 带你一起梳理Word2vec相关概念 0x00 摘要 本文将尽量使用易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来说,运用感性直觉的思考来帮大家梳理Word2vec相关概念. 0 ...
- [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林
[白话解析] 通俗解析集成学习之bagging,boosting & 随机森林 0x00 摘要 本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来 ...
- [白话解析] 通过实例来梳理概念 :准确率 (Accuracy)、精准率(Precision)、召回率(Recall)和F值(F-Measure)
[白话解析] 通过实例来梳理概念 :准确率 (Accuracy).精准率(Precision).召回率(Recall)和F值(F-Measure) 目录 [白话解析] 通过实例来梳理概念 :准确率 ( ...
- 白话解析:一致性哈希算法 consistent hashing【转】
学习一致性哈希算法原理的时候看到博主朱双印的一片文章,看完就懂,大佬! 白话解析:一致性哈希算法 consistent hashing
随机推荐
- phpstorm之代码质量工具
在进行php开发的时候, 经常由于编码上的不规范导致了隐藏的bug,这里介绍代码质量工具 PHP CodeSniffer: phpcs [安装] composer require squizla ...
- Tornado框架之深入(二)
知识点 Application设置 debug模式 路由设置扩展 RequestHandler的使用 输入方法 输出方法 可重写接口 目录: Application settings 路由映射 输入 ...
- pycharm之远程开发
转载:https://amos-x.com/index.php/amos/archives/pycharm-remote/ 前言 远程开发什么意思? 远程开发就是用本地的个人电脑进行代码编写开发,但是 ...
- docker之可视化工具
Docker UI进行Docker管理(单机) 1.拉取镜像 Docker UI进行Docker管理 2.创建docker容器 docker run -it -d --name docker-web ...
- Mybatis【11】-- Mybatis Mapper动态代理怎么写?
目录 1.回顾Mybatis执行sql的流程 2.mapper动态代理怎么写? 3.mapper动态代理怎么做的? 1.回顾Mybatis执行sql的流程 在之前的代码中我们的运行过程再梳理一下,首先 ...
- 使用IDEA一键发布应用
1.编辑Dockerfile from java:8 WORKDIR /usr/local ADD ./target/jpaas-bpm.jar . CMD ["java",&qu ...
- uni-app 简单上手
1.前言 uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.Web(响应式).以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/ ...
- SEEDLab —— 环境变量与 Set-UID 实验
[软件安全]实验1--环境变量与 Set-UID 实验 Task 1:配置环境变量 使用printenv或env指令来打印环境变量: 如果只想打印特定的环境变量,如PWD变量,可以使用printe ...
- 常用 NoSQL 比较
Q: 请根据 CAP 实现程度,分布式实现方式,数据结构,查询方式,存储引擎等比较 mongodb, redis, cassandra, scylladb, dragonflydb, TiKV, co ...
- Redis应用—8.相关的缓存框架
大纲 1.Ehcache缓存框架 (1)Ehcache的核心对象 (2)单独使用Ehcache (3)Spring整合Ehcache (4)Spring Boot整合Ehcache (5)实际工作中如 ...