Flink学习-时间语义

含义

事件时间:数据产生的时间
处理时间:数据的处理时刻

水位线

用来衡量事件时间进展的标记,就被称作『水位线』,水位线可以看作是一条特殊的数据记录,是插入到数据流中的一个标记点,主要内容是个时间戳,标记事件时间。
虽然水位线代表着数据事件时间,但是数据可能乱序到达,如何处理乱序的水位线,在
乱序+数据量小:判断数据当前时间是否大于当前水位线,大于则更新水位线。
乱序+数据量大:每过一段找到这段时间最大的时间戳,判断与当前水位线关系,大则更新
乱序+迟到的数据:为了让窗口窗口收集到迟到的数据,采用等待窗口。
水位线特性:

  1. 水位线是插入到数据流中的一个标记,可以认为是一个特殊的数据
  2. 水位线主要的内容是一个时间戳,表示当前事件时间的进展
  3. 水位线是基于数据的时间戳生成的
  4. 水位线的时间戳必须单调递增,以确保任务的事件时间一直向前推进

flink中可以将数据流切割成有限大小的多个存储桶(存储桶),会把每个数据分发到对应的桶中,每个数据都会分发到对应的桶,当到达窗口结束时间时,就对每个桶中收集的数据进行计算处理。

生成水位线

完美的水位线是绝对正确的,是指等足够的时间,保证水位线之前的数据全部到齐,但是为实时性,没有办法让水位线等的足够长,对于低延迟和结果的正确需要权衡机制
指定watermark 策略,然后使用时间窗口时应该使用事件时间的窗口。
watermark主要有两类一类是有序的,一类是乱序的(其实,本质上有序的就是乱序容忍度为0的乱序)
有序流:watermark = 最大事件时间
无序流:watermark= 最大事件时间 - 乱序容忍度

多并行度下水位线传递

在多个算子下,数据的处理速度不同,在流式计算中,不同算子处理的进度是不同的,在watermark进度传递时候,按照最小原则进行传递。多个并行度下只有算子的每个处理进度到达触发。
特殊情况下,可能由于某个并行度某个并行度下一直没有数据,会导致窗口一直不触发,针对这种清库,可以为并行度设置空闲等待。

迟到数据处理

针对迟到的数据可以设置数据允许迟到,保证对于迟到的数据也能进行处理,通过 allowedLateness 推迟关闭窗口,窗口主要有两步:1是触发窗口计算,2是窗口关闭:乱序容忍度针对触发窗口计算时间的推迟;推迟关闭窗口则是针对窗口关闭,在推迟窗口关闭这块则是来一条则需要重新计算一次窗口。

迟到数据可以通过侧数据流进行处理

因为实时流式处理,不会一直等待数据,但是可以通过辅助的侧流的数据进行处理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

taotaobujuerulv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值