Flink的waterMark概念解释
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概念解释相关推荐
- Flink:watermark
Table of Contents 三种时间概念 Processing time Event Time Ingestion time watermark 并行流的Watermarks 迟到的事件 wa ...
- faster-rcnn原理及相应概念解释
R-CNN --> FAST-RCNN --> FASTER-RCNN R-CNN: (1)输入测试图像: (2)利用selective search 算法在图像中从上到下提取2000个左 ...
- EBS模块介绍和概念解释
Oracle模块介绍和概念解释 Oracle重要模块简介 账套 会议科目表 记账本位币 会议日历的财务报告实体 组织 业务组 公司的最高部门 法人实体 提交财务和税务报表的法人公司 经营单位 orac ...
- (转)使用CGLIB实现AOP功能与AOP概念解释
http://blog.csdn.net/yerenyuan_pku/article/details/52864395 使用CGLIB实现AOP功能 在Java里面,我们要产生某个对象的代理对象,这个 ...
- 【Flink】FLink 如果watermark水印时间超出今天会是什么问题呢
1.概述 FLink 如果watermark水印时间超出今天会是什么问题呢 测试如下 /*** 测试点:测试事件时间,如果中途突然来了一个时间是未来时间 会导致什么?* 当前时间* 2022-01-0 ...
- flink的watermark简单理解
1.flink的watermark的作用是处理乱序,核心有两点: a.延迟等待一段时间,等乱序的数据到达 b.不能一直等,得有个限度,到了时间点没到,那么后面再来的乱序数据只能丢弃 2.对某个时间窗开 ...
- Flink之watermark(水印)讲解
flink中watermark的详细介绍 使用前提: 处理数据开窗,处理数据的时间语义是事件时间,也就是每条数据产生的时间. 使用场景(解决问题): 处理乱序数据:flink中是实时处理数据,但是在处 ...
- 【转】faster-rcnn原理及相应概念解释
R-CNN --> FAST-RCNN --> FASTER-RCNN R-CNN: (1)输入测试图像: (2)利用selective search 算法在图像中从上到下提取2000个左 ...
- 概念解释--工具链是什么?
概念解释-工具链是什么 工具链的字面意思 CMSIS支持的工具链 本文搬运自博客:https://www.cnblogs.com/lvdongjie/p/6835048.html 工具链的字面意思 程 ...
最新文章
- docker --restart=always 参数 docker重启容器自动重启
- 所想即所得 运维进行时
- Web网络知识:什么是HTTP请求合并?
- 线程间到底共享了哪些进程资源?
- jQuery 选择器和筛选
- 697.数组的度(力扣leetcode) 博主可答疑该问题
- 备战数学建模12-模糊综合评价模型
- 基于python管理系统论文_基于Python的学生信息管理系统
- 计算机中怎样重新安装ps,什么样的电脑适合安装高版本Photoshop?该如何安装和卸载PS呢?...
- 敏捷 绩效_管理敏捷团队绩效的四个技巧
- Linux学习笔记(四)Linux基础操作
- SDK “iphoneos“ cannot be located
- RHEL6配置本地源
- YOLOv5~目标检测模型精确度
- linux下怎么退出vi编辑器,按esc没有用;vim recording
- 灵飞经4·西城八部 第十六章 风流云散 6
- BaoDing University热身赛 2020-1-31 13:50 3 hours
- ARM设计: 简化版任务调度器的实现和应用(2)
- Linux系统的学习小结
- 【我在异世界学Linux】Shell外壳程序以及权限的理解(粘滞位、umask)