Flink实战(130)Flink之你应该了解的Watermark

本文详细探讨了Flink中的时间语义,重点介绍了EventTime和Watermark的概念。Watermark作为衡量EventTime流处理时间进度的手段,用于处理数据乱序问题。Flink中的Watermark会在流中流转,遵循特定的传递规则,如单输入取最大值,多输入取最小值。此外,文章还讲解了Watermark的生成和使用方式,包括在source端和通过assignTimestampsAndWatermarks分配,以及如何触发窗口函数操作。
摘要由CSDN通过智能技术生成

一、时间语义

Flink在流处理中提供了不同的时间语义支持,其中有两种核心的时间语义:ProcessingTime与EventTime。

ProcessingTime表示的是处理时间,在处理时间流处理中,所有涉及的时间计算都是以本地机器的时间为准,例如每5分钟的一个时间窗口操作,0-5分钟的窗口触发需要满足本地机器到达5分钟后然后触发窗口函数操作这5分钟内的数据。由于操作的数据是这段时间到达的数据,所以其处理的数据量容易受上游处理的速度影响,处理的快汇聚的数据就多,所以其结果不具有确定性,特别是在流重放的情况下;

EventTime表示的是事件时间,也就是数据本身含有的时间属性,例如点击页面事件的点击时间,那么在事件时间的流处理中,事件时间就是表示当前的时间进度,而不是本地机器时间。在分配时间窗口的数据时会按照数据的时间属性来分配,由于数据时间属性不会改变,因此在数据重放过程中,分配在窗口的数据也不会改变,因此得到一个比较确定的结果,其目标也就是尽可能的还原数据场景。

二、EventTime与Watermark

在ProcessingTime流处理中时间窗口的触发是当本地机器时间达到窗口结束时自动触发,而在EventTime流处理中时间窗口的触发是当前Watermark大于等于窗口的结束时间时触发。

何为Watermark?Watermark也称之为水位,是用来衡量在EventTime语义的流处理中时间进度,也就是当前流处理达到的时间点,其本质上就是一个时间戳,系统会认为在水位以下(事件时间小于watermark值)的数据已经全部到达。

事件中已经包含时间属性,为什么还需要W

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王知无(import_bigdata)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值