flink中watermark的详细介绍

使用前提:

处理数据开窗,处理数据的时间语义是事件时间,也就是每条数据产生的时间。

使用场景(解决问题):

处理乱序数据:flink中是实时处理数据,但是在处理数据的时候会出现因为网络传输的问题,所以数据先产生的反而到后面才到达,在被处理时候就会出现数据混乱,而且因为开窗,窗口关闭但是本窗口的数据来迟,导致数据丢失;

理想转态,数据按照顺序到达

则对应窗口可以获得的数据就是

每一个窗口都可以得到对应的数据
但实际数据到来的顺序可能会出现乱序:

则没有watermark会每个窗口数据会出现的情况:

可以看到第一个来的4这个数据会导致[0,3)窗口关闭,而后来的数据1,2都无法在进入这个窗口中,也就导致了数据丢失,同样的道理6号数据,会导致[3,6)窗口关闭,3,5数据丢失

问题解决:

通过watermark来解决,简单来说就是延迟窗口关闭的时间,等一会迟到的数据,窗口关闭不在依据数据的时间,而是到达的watermark的时间。
看数据知道最大的乱序时间是4s(假设每个编号代表数据本省产生的时间),所以可以将窗口延迟等待的时间设置为4s;

watermark的生成就是每来一条数据生成一次,但是生成的计算公式是到最新到达的一条数据时间为止,数据最大的时间-4,当前已经到达的数据的最大时间,也就是说watermark的生成是只能不断变大,或者不变,而不可能减小的。(这里为方便没有再减一,实际代码运行时会在-1的) watermark= maxTimestamp - outOfOrdernessMillis -1

所以生成的watermark依次为:

这样就是4数据到来后,产生watermark为0,1数据到来后产生的watermark还是0,因为到1号数据为止最大的时间是4,依次类推就如上图。
因为现在窗口关闭是依据watermark的时间,而不是数据本身时间了,所以4号数据到达[3,6)窗口时,产生的watermark为0不会导致[0,3)窗口关闭,只有等到watermark为3才会关闭,也就是等到7号数据到达产生3的watermark的时候,所以每个窗口的数据就为:

所有的数据都可以到原本的窗口。

多平行度下的watermark

一个子任务中watermark会发往所有下一算子中的子任务,也就是一发多,
同样一个子任务会接收上一个算子中所有子任务的watermark,这时起作用的就是最小的哪一个watermark。
watermark可以理解为一个特殊的数据,这个数据不参与计算,仅仅是对窗口的触发关闭起作用;

总结:

1)衡量事件时间的进展
2) 单调不减的(保持不变,或 增加)
3) 是一个特殊时间戳,生成之后插入到流里,随着流的流动传递
4)解决 乱序 的问题
5)认为,在它之前的数据都处理过了(如果还有,说明该数据迟到了)
6)触发 窗口等 的 计算、关闭1

Flink之watermark(水印)讲解相关推荐

  1. 【Flink】FLink 如果watermark水印时间超出今天会是什么问题呢

    1.概述 FLink 如果watermark水印时间超出今天会是什么问题呢 测试如下 /*** 测试点:测试事件时间,如果中途突然来了一个时间是未来时间 会导致什么?* 当前时间* 2022-01-0 ...

  2. Flink中window 窗口和时间以及watermark水印

    我们都知道,Flink的核心是流式处理,但同时也支持批处理,Flink底层是一个流式引擎,在这个上面实现了流处理和批处理,而窗口则是批处理的实现. 在Flink中window从大的分类上主要有三种:T ...

  3. flink设置watermark以及事件时间字段源码分析

    flink设置watermark以及事件时间字段源码分析 背景 1.1.提取时间戳字段,用于事件时间语义处理数据 1.2.设置水位线(水印)watermark TimestampAssigner 核心 ...

  4. flink的watermark简单理解

    1.flink的watermark的作用是处理乱序,核心有两点: a.延迟等待一段时间,等乱序的数据到达 b.不能一直等,得有个限度,到了时间点没到,那么后面再来的乱序数据只能丢弃 2.对某个时间窗开 ...

  5. Flink:watermark

    Table of Contents 三种时间概念 Processing time Event Time Ingestion time watermark 并行流的Watermarks 迟到的事件 wa ...

  6. flink 不设置水印_区分理解Flink水印延迟与窗口允许延迟的概念

    link 在开窗处理事件时间(Event Time) 数据时,可设置水印延迟以及设置窗口允许延迟(allowedLateness)以保证数据的完整性.这两者因都是设置延迟时间所以刚接触时容易混淆.本文 ...

  7. Flink之Watermark滑动窗口案例

    只要水印watermark的时间大于等于窗口的结束时间,并且窗口内有数据存在,就会触发对应窗口计算. 除此之外,如果flink配置了allowedLateness参数,只要水印watermark的时间 ...

  8. Flink的waterMark概念解释

    Stream数据中Time(时间)可以分为三种: Event Time:事件真正产生的时间,即业务系统真正产生日志的时间,它通常由事件中的时间戳描述. Ingestion time:事件进入Flink ...

  9. flink 不设置水印_Flink基础:时间和水印

    ​ 往期推荐: 本篇终于到了Flink的核心内容:时间与水印.最初接触这个概念是在Spark Structured Streaming中,一直无法理解水印的作用.直到使用了一段时间Flink之后,对实 ...

最新文章

  1. VMware View Composer 虚拟机映像管理
  2. IE – File - Work Offline
  3. 腾讯云 视频 点播 视频上传接口
  4. Binder子系统之调试分析(三)
  5. 【机器学习基础】机器学习和深度学习的练习数据
  6. Windows 8 IIS中配置PHP运行环境的方法
  7. pageControl设置不居中显示,居左或居右
  8. eBPF Up Running: Overview
  9. Cacti auth.php,Liunx运维监控_shark巨菜_cacti篇
  10. python字符串格式化符号含义及转义字符含义
  11. 安装VS2008 SP1
  12. 《Java数据结构入门》顺序表详解
  13. 什么是无穷:康托超穷数理论简评
  14. LeetCode 1071(最大公约)
  15. 鸿蒙分期靠谱吗,花呗借呗“陷阱”正式被确认,这两个禁忌不要触碰,别说没提醒你...
  16. Pinyin4j之Pinyin4jUtils工具类
  17. 计算机管理中没有telnet,Win10专业版没有telnet客户端怎么办?
  18. 机械键盘各种轴的特点
  19. JAVA 命令行运行java项目
  20. opengles图像处理之图片锐化处理

热门文章

  1. CTF-Crypto-各种密码原理及解密方法
  2. Ubuntu20.04安装vscode打开出现花屏
  3. LaTex中文编辑入门
  4. oracle锁资源不够,Oracle解锁,解决“ora00054:资源正忙”错误
  5. fastapi 参数
  6. Java HashSet
  7. Java中 关键字abstract(抽像)的定义
  8. 2020年最强大脑第五期黑白迭代小游戏实现(Java)
  9. Java中常用的Dos命令
  10. CCP/XCP标定协议解析