一、摘要

如果想使用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. Mybatis【7】-- Mybatis如何知道增删改是否成功执行?

    代码直接放在Github仓库[https://github.com/Damaer/Mybatis-Learning/tree/master/mybatis-05-CURD ] 需要声明的是:此Myba ...

  2. IO介绍-下

    中断 由外部设备引起的中断,称为外中断. 由内部错误引起的中断,称为内中断,或者是陷入.例如:非法指令,地址越界,电源故障等.   中断向量表 中断优先级 多中断源的处理方式 屏蔽中断 嵌套中断 根据 ...

  3. django admin 后台管理 新手学习步骤记录 (2)

    学习使用django admin后台管理. 参考.Django基础之Admin后台数据管理_django admin_马航行的博客-CSDN博客

  4. 鸿蒙UI开发快速入门 —— part11: 鸿蒙计算器开发实践

    1.前言 经过我们前面10章的学习,我们基本上可以开发出一个简单的APP了,为了巩固学习的内容,我们先开发一个计算器APP来连个手(文末有源代码),界面如下: 包含基本的计算器运算功能 支持一键清空, ...

  5. 【分块】LibreOJ 6277 数列分块入门1

    前言 分块是一种优雅的暴力,将数组按块长 \(\sqrt{n}\) 进行分块,可实现区间加法.区间求和和区间逆序对计数等场景,进行 \(m\) 次操作的时间复杂度:\(O(m\sqrt{n})\). ...

  6. 在 .NET 下使用 Pdfium 渲染和打印 PDF

    在 .NET 下使用 Pdfium 渲染和打印 PDF 大家可能已经看到这条 新闻,Google最近又新推出一个开源项目,名叫 PDFium,将成为Chrome浏览器的PDF渲染引擎组件.与已有的开源 ...

  7. 用 16G 内存存放 30亿数据(Java Map)转载

    在讨论怎么去重,提出用 direct buffer 建 btree,想到应该有现成方案,于是找到一个好东西: MapDB - MapDB : http://www.mapdb.org/ 以下来自:ko ...

  8. shell 读取文件内容到数组

    在 shell 脚本中,可以使用下面的语法来读取文件内容并将其存储到数组中:   bash 复制代码 array=() while read line; do array+=("$line& ...

  9. 在不同操作系统上安装 PostgreSQL

    title: 在不同操作系统上安装 PostgreSQL date: 2024/12/26 updated: 2024/12/26 author: cmdragon excerpt: PostgreS ...

  10. Qt数据库应用21-数据分组导出

    一.前言 数据分组导出和打印这个需求并不是近期的需求,而是之前做温湿度监控系统的时候提的需求,当然也有几个系统用到了,比如啤酒保鲜监控系统.这个需求的应用场景是,有很多个设备,每个设备都产生了很多的运 ...