【Flink】WaterMark与EventTime

【Flink重难点辨析】WaterMark与EventTime

WaterMark

Flink中测量事件时间的进度的机制就是watermark(水印). watermark作为数据流的一部分在流动, 并且携带一个时间戳t。
一个Watermark(t)表示在这个流里面事件时间已经到了时间t, 意味着此时, 流中不应该存在这样的数据: 他的时间戳t2<=t (时间比较旧或者等于时间戳)。
1、衡量事件时间的进展
2、是一个特殊的时间戳,生成之后随着流的流动而向后传递(广播方式)
3、用来处理数据乱序的问题。
4、触发窗口等的计算、关闭
5、单调递增的(时间不能倒退),与key无关。
6、Flink认为,小于Watermark时间戳的数据处理完了,不应该再出现

有序流中的水印

事件是有序的(生成数据的时间和被处理的时间顺序是一致的), watermark是流中一个简单的周期性的标记。
在这里插入图片描述

有序场景:
1、底层调用的也是乱序的Watermark生成器,只是乱序程度传了一个0ms。
2Watermark = maxTimestamp – outOfOrdernessMills – 1ms
			 = maxTimestamp – 0ms – 1ms
			 =>事件时间 – 1ms

乱序流中的水印

按照时间戳来看, 事件是乱序的, 则watermark对于这些乱序的流来说至关重要
在这里插入图片描述

乱序场景:
1、什么是乱序 => 时间戳大的比时间戳小的先来
2、乱序程度设置多少比较合适?   
a)经验值 => 对自身集群和数据的了解,大概估算。
b)对数据进行抽样。  --->抽样,算最大乱序程度
c)肯定不会设置为几小时,一般设为 秒 或者 分钟。
3Watermark = maxTimestamp – outOfOrdernessMills – 1ms
             =>当前最大的事件时间 – 乱序程度(等待时间)- 1ms 

EventTime

事件时间是指的这个事件发生的时间.
事件时间程序必须制定如何产生Event Time Watermarks(水印) . 在事件时间体系中, 水印是表示时间进度的标志(作用就相当于现实时间的时钟).
注意:在Flink1.12之前默认的时间语义是处理时间, 从1.12开始, Flink内部已经把默认的语义改成了事件时间

EventTime和WaterMark的使用

1.Monotonously Increasing Timestamps(时间戳单调增长:允许的延迟为0) —>有序
//分配时间戳和水印
waterSensorDStream.assignTimestampsAndWatermarks(WatermarkStrategy.
		//水印策略:时间戳单调增长
		<WaterSensor>forMonotonousTimestamps()
		//指定时间戳
		.withTimestampAssigner(new SerializableTimestampAssigner<WaterSensor>() {
    
              @Override 
              public long extractTimestamp(WaterSensor element, long recordTimestamp) {
   
                  return element.getTs() * 1000;
              }
          })
); 
2.Fixed Amount of Lateness(允许固定时间的延迟) —>乱序
//分配时间戳和水印
waterSensorDStream.assignTimestampsAndWatermarks(WatermarkStrategy.
		//水印策略:固定时间的延迟
		.<WaterSensor>forBoundedOutOfOrderness(Duration.ofSeconds(3)) //最大容忍的延迟时间
		//指定时间戳
		.withTimestampAssigner(new SerializableTimestampAssigner<WaterSensor>() {
    
              @Override 
              public long extractTimestamp(WaterSensor element, long recordTimestamp) {
   
                  return element.getTs() * 1000;
              }
          }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值