Flink_时间语义(事件时间)——watamark

本文探讨了Flink中如何通过Watermark解决事件时间乱序问题,介绍了Watermark的概念、生成方式、与window的结合以及在设置EventTime和处理迟到数据中的关键作用。讲解了如何使用watermark保障数据一致性并举例配置实践。
摘要由CSDN通过智能技术生成

一:时间语义:
1.Event Time **************事件时间。 乱序数据。配合Watermark.
2.Ingestion Time 数据进入Flilnk的时间
3.Processing Time;执行操作算子的本地系统时间
二: 由于网络、分布式等原因,导致乱序的产生,所谓乱序,就是指 Flink 接收到的事件的先后顺序不是严格按照事件的 Event Time 顺序排列的。
三:处理乱序数据三重保障
1;引入watermark 比较小 30ms 吼住大部分数据
2.允许处理迟到数据 .allowedLateness(Time.minutes(1))
3.利用侧输出流 .sideOutputLateDate(new OutputTag)
三:解决迟到数据:Watermark 与window连用。
watermark是一条特殊的数据记录。只包含当前事件时间。单调递增。
Watermark=当前事件的最大值-t(延迟)=数据的最大乱序程度。
Watermark的传递:
分布式处理:广播分发。上游向下游传递按照广播。下游接受上游按照分区watermark 取最慢始终。
给数据延迟处理。
window的关窗都是由watermark触发的。改变了原来的时间戳关窗操作 。延迟了关窗时间。
Watermark 是一种衡量 Event Time 进展的机制。
Watermark 是一种衡量 Event Time 进展的机制。
数据流中的 Watermark 用于表示 timestamp 小于 Watermark 的数据,都已经到达了,因此,window 的执行也是由 Watermark 触发的。
Watermark取到是当前事件的时间戳-固定延迟=Watermark
当前时间是5 延迟为2 Watermark就是5-2=3 窗口不变 只是将关窗时间向后推移。
Watermark 应该给看数据的乱序程度。看数据的延迟。
四:设置事件时间予以。配合wataMark
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
//设置时间语义 默认TimeCharacteristic.ProcessingTime
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
//提取时间戳
val ds = dataStram.map(data => {
val arr: Array[String] = data.split(",")
SensorReading(arr(0), arr(1).toLong, arr(2).toDouble)
})
// .assignAscendingTimestamps(_.timestamp
1000) //默认升序提取时间戳 没有乱序数据的情况下。不用定义watermark
//周期性生成watermark.这里定义的watermark为当前的最大时间戳-5.
.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractorSensorReading {
override def extractTimestamp(element: SensorReading): Long = {element.timestamp
1000}
})
//周期性生成watermark 数据比较密集 隔一段时间自动生成watermark long potentialWM = currentMaxTimestamp - maxOutOfOrderness; 默认周期时间为200ms env.getConfig.setAutoWatermarkInterval(500) 设置为500ms
//间断性生成watermark 按照数据 来一条数据生成一个watermark 效率比较低。每一个数据后面都有一个watermark

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值