一、摘要

如果想使用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的更多相关文章

  1. [白话解析] Flink的Watermark机制

    [白话解析] Flink的Watermark机制 0x00 摘要 对于Flink来说,Watermark是个很难绕过去的概念.本文将从整体的思路上来说,运用感性直觉的思考来帮大家梳理Watermark ...

  2. 转 白话解析:一致性哈希算法 consistent hashing

    摘要: 本文首先以一个经典的分布式缓存的应用场景为铺垫,在了解了这个应用场景之后,生动而又不失风趣地介绍了一致性哈希算法,同时也明确给出了一致性哈希算法的优点.存在的问题及其解决办法. 声明与致谢: ...

  3. flink time and watermark

    流处理中时间本质上就是一个普通的递增字段(long型,自1970年算起的微秒数),不一定真的表示时间. watermark只是应对乱序的办法之一,大多是启发式的,在延迟和完整性之间抉择.(如果没有延迟 ...

  4. [白话解析] 深入浅出一致性Hash原理

    [白话解析] 深入浅出一致性Hash原理 0x00 摘要 一致性哈希算法是分布式系统中常用的算法.但相信很多朋友都是知其然而不知其所以然.本文将尽量使用易懂的方式介绍一致性哈希原理,并且通过具体应用场 ...

  5. [白话解析] 深入浅出 极大似然估计 & 极大后验概率估计

    [白话解析] 深入浅出极大似然估计 & 极大后验概率估计 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解 极大似然估计 & 极大后验概率估计,并且从名著中找 ...

  6. [白话解析] 深入浅出支持向量机(SVM)之核函数

    [白话解析] 深入浅出支持向量机(SVM)之核函数 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解支持向量机中的核函数概念,并且给大家虚构了一个水浒传的例子来做进一步的通俗 ...

  7. [白话解析] 带你一起梳理Word2vec相关概念

    [白话解析] 带你一起梳理Word2vec相关概念 0x00 摘要 本文将尽量使用易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来说,运用感性直觉的思考来帮大家梳理Word2vec相关概念. 0 ...

  8. [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林

    [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林 0x00 摘要 本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来 ...

  9. [白话解析] 通过实例来梳理概念 :准确率 (Accuracy)、精准率(Precision)、召回率(Recall)和F值(F-Measure)

    [白话解析] 通过实例来梳理概念 :准确率 (Accuracy).精准率(Precision).召回率(Recall)和F值(F-Measure) 目录 [白话解析] 通过实例来梳理概念 :准确率 ( ...

  10. 白话解析:一致性哈希算法 consistent hashing【转】

    学习一致性哈希算法原理的时候看到博主朱双印的一片文章,看完就懂,大佬! 白话解析:一致性哈希算法 consistent hashing

随机推荐

  1. phpstorm之代码质量工具

    在进行php开发的时候, 经常由于编码上的不规范导致了隐藏的bug,这里介绍代码质量工具 PHP CodeSniffer:    phpcs [安装] composer require squizla ...

  2. Tornado框架之深入(二)

    知识点 Application设置 debug模式 路由设置扩展 RequestHandler的使用 输入方法 输出方法 可重写接口 目录: Application settings 路由映射 输入 ...

  3. pycharm之远程开发

    转载:https://amos-x.com/index.php/amos/archives/pycharm-remote/ 前言 远程开发什么意思? 远程开发就是用本地的个人电脑进行代码编写开发,但是 ...

  4. docker之可视化工具

    Docker UI进行Docker管理(单机) 1.拉取镜像 Docker UI进行Docker管理 2.创建docker容器 docker run -it -d --name docker-web ...

  5. Mybatis【11】-- Mybatis Mapper动态代理怎么写?

    目录 1.回顾Mybatis执行sql的流程 2.mapper动态代理怎么写? 3.mapper动态代理怎么做的? 1.回顾Mybatis执行sql的流程 在之前的代码中我们的运行过程再梳理一下,首先 ...

  6. 使用IDEA一键发布应用

    1.编辑Dockerfile from java:8 WORKDIR /usr/local ADD ./target/jpaas-bpm.jar . CMD ["java",&qu ...

  7. uni-app 简单上手

    1.前言 uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.Web(响应式).以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/ ...

  8. SEEDLab —— 环境变量与 Set-UID 实验

    [软件安全]实验1--环境变量与 Set-UID 实验 Task 1:配置环境变量 使用printenv或env指令来打印环境变量: ​ 如果只想打印特定的环境变量,如PWD变量,可以使用printe ...

  9. 常用 NoSQL 比较

    Q: 请根据 CAP 实现程度,分布式实现方式,数据结构,查询方式,存储引擎等比较 mongodb, redis, cassandra, scylladb, dragonflydb, TiKV, co ...

  10. Redis应用—8.相关的缓存框架

    大纲 1.Ehcache缓存框架 (1)Ehcache的核心对象 (2)单独使用Ehcache (3)Spring整合Ehcache (4)Spring Boot整合Ehcache (5)实际工作中如 ...