Stream数据中Time(时间)可以分为三种:

Event Time:事件真正产生的时间,即业务系统真正产生日志的时间,它通常由事件中的时间戳描述。
Ingestion time:事件进入Flink的时间;
Processing Time:事件被处理时,当前的系统时间,默认使用的就是这个词。

我们统计Event time窗口某个时间段内产生的日志。存在一个问题:

kafka出来的数据有可能是乱序的,也有可能是延迟的。

这种情况下我们就定义出了watermark得到概念。

为什么需要watermark?
在flink当中,当我们基于event time 进行窗口计算时,由于数据存在乱序和延迟到来的问题,即最先进入窗口计算的数据不一定是在业务上最先产生的数据,所以我们需要提供一种机制,保证对应窗口内的数据已经到达,这样才能触发窗口计算,这个机制就是watermark机制。
watermark是flink为了处理event time窗口计算提出的一种机制,本质上就是一个时间戳,代表着比这个时间早的事件已经全部进入到相应的窗口,后续不会在有比这个时间小的事件出现,基于这个前提我们才有可能将event time窗口视为完整并触发窗口的计算。

我们知道,流处理从事件产生,到流经source,再到operator,中间是有一个过程和时间的。虽然大部分情况下,流到operator的数据都是按照事件产生的时间顺序出现,但是也不排除由于网络延迟等原因,导致乱序的产生,特别是使用kafka的话,多个分区的数据无法保证有序。所以在进行window计算的时候,我们又不能无限期的等下去,必须要有个机制来保证一个特定的时间后,必须触发window去进行计算了。这个特别的机制,就是watermark,watermark是用于处理乱序事件的,watermark可以翻译为水位线!

注意:基于event time窗口计算,存在一个问题就是延迟和乱序,才提出了watermark。

wantermark的三种应用场景:

1、有序流中的wartermark

2、无序流中的watermark

3、多并行度中的watermark

watermark触发eventTime窗口计算的条件:

只要水印water的时间大于等于窗口的结束时间,并且窗口内有数据存在,就会触发对应窗口的计算;除此之外,如果flink配置allowedLateness参数,只要水印watermark的时间小于等于窗口的结束时间加上allowedLateness参数时间,将会重新触发对应窗口的计算。

水印watermark的生成方式
通常在接收到source的数据后,应该立即生成watermark,然后watermark随着数据流向传输,在flink当中提供了俩种生成watermark的方式:

方式1: periodic Watermark
周期性的(基于一定时间间隔或者达到一定的记录条数)产生一个watermark,默认是100ms,在实际的生产环境当中一般使用这种方式;

class GenerateWaterMark implements AssignerWithPeriodicWatermarks<MyEvent>{//maxOutOfOrderness表示允许数据的最大乱序时间Long maxOutOfOrderness = 3500L;Long currentMaxTimestamp =0L;//获取watermark的水位线@Nullable@Overridepublic Watermark getCurrentWatermark() {return new Watermark(currentMaxTimestamp-maxOutOfOrderness);}//从数据本身提取EventTime@Overridepublic long extractTimestamp(Event event, long l) {long timestamp=event.getEventTime();currentMaxTimestamp=Math.max(timestamp,currentMaxTimestamp);return timestamp;}
}

方式2 :Punctuated Watermark
数据流中每一个递增的eventTime都会产生一个watermark,这种方式因为会产生大量的watermark所以容易对下游算子造成压力,所以只有在实时性要求非常高的场景才会选择这种方式。

Flink的waterMark概念解释相关推荐

  1. Flink:watermark

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

  2. faster-rcnn原理及相应概念解释

    R-CNN --> FAST-RCNN --> FASTER-RCNN R-CNN: (1)输入测试图像: (2)利用selective search 算法在图像中从上到下提取2000个左 ...

  3. EBS模块介绍和概念解释

    Oracle模块介绍和概念解释 Oracle重要模块简介 账套 会议科目表 记账本位币 会议日历的财务报告实体 组织 业务组 公司的最高部门 法人实体 提交财务和税务报表的法人公司 经营单位 orac ...

  4. (转)使用CGLIB实现AOP功能与AOP概念解释

    http://blog.csdn.net/yerenyuan_pku/article/details/52864395 使用CGLIB实现AOP功能 在Java里面,我们要产生某个对象的代理对象,这个 ...

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

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

  6. flink的watermark简单理解

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

  7. Flink之watermark(水印)讲解

    flink中watermark的详细介绍 使用前提: 处理数据开窗,处理数据的时间语义是事件时间,也就是每条数据产生的时间. 使用场景(解决问题): 处理乱序数据:flink中是实时处理数据,但是在处 ...

  8. 【转】faster-rcnn原理及相应概念解释

    R-CNN --> FAST-RCNN --> FASTER-RCNN R-CNN: (1)输入测试图像: (2)利用selective search 算法在图像中从上到下提取2000个左 ...

  9. 概念解释--工具链是什么?

    概念解释-工具链是什么 工具链的字面意思 CMSIS支持的工具链 本文搬运自博客:https://www.cnblogs.com/lvdongjie/p/6835048.html 工具链的字面意思 程 ...

最新文章

  1. docker --restart=always 参数 docker重启容器自动重启
  2. 所想即所得 运维进行时
  3. Web网络知识:什么是HTTP请求合并?
  4. 线程间到底共享了哪些进程资源?
  5. jQuery 选择器和筛选
  6. 697.数组的度(力扣leetcode) 博主可答疑该问题
  7. 备战数学建模12-模糊综合评价模型
  8. 基于python管理系统论文_基于Python的学生信息管理系统
  9. 计算机中怎样重新安装ps,什么样的电脑适合安装高版本Photoshop?该如何安装和卸载PS呢?...
  10. 敏捷 绩效_管理敏捷团队绩效的四个技巧
  11. Linux学习笔记(四)Linux基础操作
  12. SDK “iphoneos“ cannot be located
  13. RHEL6配置本地源
  14. YOLOv5~目标检测模型精确度
  15. linux下怎么退出vi编辑器,按esc没有用;vim recording
  16. 灵飞经4·西城八部 第十六章 风流云散 6
  17. BaoDing University热身赛 2020-1-31 13:50 3 hours
  18. ARM设计: 简化版任务调度器的实现和应用(2)
  19. Linux系统的学习小结
  20. 【我在异世界学Linux】Shell外壳程序以及权限的理解(粘滞位、umask)

热门文章

  1. Tensorflow一些常用基本概念与函数(4)
  2. python与数值计算环境安装
  3. Kanzi编程基础3 - 图片读取与显示
  4. OpenCV kmeans代码
  5. Struts2是什么?
  6. OpenJTAG与JLink的区别比较
  7. python进程与线程_Python进程与线程知识
  8. java访问对象的属性_java访问对象的属性和行为详细介绍
  9. java图形界面_学习Java有什么用?Java的应用领域有哪些?
  10. Linux驱动实现灯循环闪烁,TQ2440上LED灯闪烁效果的驱动程序实现