Flink的WaterMark详解

本文介绍了Flink的WaterMark概念,它用于处理事件时间语义下的数据乱序。Flink提供三种时间语义:Event Time、Ingestion Time和Processing Time。WaterMark作为一种特殊数据,确保单调递增,用于标记已接收的最早可能迟到的数据点。通过图示解释了WaterMark在Flink并行任务中的传递,并展示了如何在数据流中引入WaterMark,包括使用AssignerWithPeriodicWatermarks和AssignerWithPunctuatedWatermarks接口来自定义WaterMark生成策略。
摘要由CSDN通过智能技术生成
  • WaterMark是什么?
    在了解Flink的WaterMark之前先要了解Flink的时间语义。在Flink里面有三种时间语义:
    ①Even Time:事件创建的时间,时间在数据里面。
    ②Ingestion Time:数据进入Flink的时间。
    ③Processing Time:处理数据的本地系统时间。
    由于网络或者分布式系统的原因,在进入Flink的数据里面有的数据是乱序的,如果乱序了,要有一种机制来防止乱序数据影响到数据的最后处理结果,那么WaterMark就是避免乱序数据带来的计算不正确的。
    WaterMark是一条特殊的数据,它有一个值,比如设定了延迟是一分钟,先在WaterMark已经涨到了10:00了,说明10:00以前的数据都已经到齐了,9:59分的数据就可以发车了。WaterMark必须是单调递增的,它与数据的时间戳有关。
    下面通过图示来介绍WAaterMark的传递:
    在这里插入图片描述
    如图所示,在Flink的任务中有四个并行的子任务,它们初始的WaterMark分别是2,4,3,6,然后第一个子任务的WaterMark为4的数据来着,到达之后就更新自己的WaterMak变成4,那么就说明这个子任务的4之前的数据都到了,其他子任务也是一样。

  • WaterMark的引入和设定
    引入watermark只需要在数据流里添加一个方法即可:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值