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
随机推荐
- Mybatis【7】-- Mybatis如何知道增删改是否成功执行?
代码直接放在Github仓库[https://github.com/Damaer/Mybatis-Learning/tree/master/mybatis-05-CURD ] 需要声明的是:此Myba ...
- IO介绍-下
中断 由外部设备引起的中断,称为外中断. 由内部错误引起的中断,称为内中断,或者是陷入.例如:非法指令,地址越界,电源故障等. 中断向量表 中断优先级 多中断源的处理方式 屏蔽中断 嵌套中断 根据 ...
- django admin 后台管理 新手学习步骤记录 (2)
学习使用django admin后台管理. 参考.Django基础之Admin后台数据管理_django admin_马航行的博客-CSDN博客
- 鸿蒙UI开发快速入门 —— part11: 鸿蒙计算器开发实践
1.前言 经过我们前面10章的学习,我们基本上可以开发出一个简单的APP了,为了巩固学习的内容,我们先开发一个计算器APP来连个手(文末有源代码),界面如下: 包含基本的计算器运算功能 支持一键清空, ...
- 【分块】LibreOJ 6277 数列分块入门1
前言 分块是一种优雅的暴力,将数组按块长 \(\sqrt{n}\) 进行分块,可实现区间加法.区间求和和区间逆序对计数等场景,进行 \(m\) 次操作的时间复杂度:\(O(m\sqrt{n})\). ...
- 在 .NET 下使用 Pdfium 渲染和打印 PDF
在 .NET 下使用 Pdfium 渲染和打印 PDF 大家可能已经看到这条 新闻,Google最近又新推出一个开源项目,名叫 PDFium,将成为Chrome浏览器的PDF渲染引擎组件.与已有的开源 ...
- 用 16G 内存存放 30亿数据(Java Map)转载
在讨论怎么去重,提出用 direct buffer 建 btree,想到应该有现成方案,于是找到一个好东西: MapDB - MapDB : http://www.mapdb.org/ 以下来自:ko ...
- shell 读取文件内容到数组
在 shell 脚本中,可以使用下面的语法来读取文件内容并将其存储到数组中: bash 复制代码 array=() while read line; do array+=("$line& ...
- 在不同操作系统上安装 PostgreSQL
title: 在不同操作系统上安装 PostgreSQL date: 2024/12/26 updated: 2024/12/26 author: cmdragon excerpt: PostgreS ...
- Qt数据库应用21-数据分组导出
一.前言 数据分组导出和打印这个需求并不是近期的需求,而是之前做温湿度监控系统的时候提的需求,当然也有几个系统用到了,比如啤酒保鲜监控系统.这个需求的应用场景是,有很多个设备,每个设备都产生了很多的运 ...