Flink(五):watermark简介

一、简介

        我们基于特定时间段进行聚合时,可以引用不同的时间类型,Flink 最新版本提供了Event Time、Processing Time 两种时间类型。数据在Flink 流转时,有时因为网络、资源等,产生一些乱序,获取到时间乱序,为了统计数据更准确,Flink 提供了水位线WaterMark 来跟踪Event Time。

二、watermark介绍

       数据在Flink流转过程中,产生一些乱序,获取到时间乱序,如图所示:

                  官方图片

       Flink 窗口为了统计数据更准确,提供watermark机制,我们不可能无限等待下去,允许为窗口操作符指定最大允许延迟。assignTimestampsAndWatermarks 指定元素在窗口关闭之前可以延迟多少时间,其默认值为 0。采用允许延迟,把那些乱序、延迟数据也统计进去,提高数据的准确性

三、watermark+window 介绍

       我们采用滚动窗口(Tumbling Windows)+watermark(水位线)来举例子说明,这样对更清晰认识到水位线的作用

 1、数据产生乱序时,指定一个大小为 5 分钟的滚动窗口

{"key":"002","time":1642263310000}
{"key":"002","time":1642263311000}
{"key":"002","time":1642263315000}
{"key":"002","time":1642263313000}

(002,2,1642263310000,1642263315000,1642263314999)

说明:在[window_start_time,window_end_time)中有数据存在只有两条,第一条数据与第三条数据相差5秒,触发窗口,后面第4条数据没计算进去,因为延迟了,这样统计结果不是很准确

       1642263310000->窗口开始时间

      1642263315000->窗口关闭时间

      1642263314999->水位线,默认设置为0

2、数据产生乱序时,指定一个大小为 5 分钟的滚动窗口+水位线(2秒)

{"key":"002","time":1642263310000}
{"key":"002","time":1642263311000}
{"key":"002","time":1642263315000}
{"key":"002","time":1642263313000}
{"key":"002","time":1642263317000}
(002,3,1642263310000,1642263315000,1642263314999)
{"key":"002","time":1642263320000}
{"key":"002","time":1642263318000}
{"key":"002","time":1642263322000}
(002,3,1642263315000,1642263320000,1642263319999)

      说明:

           1)watermark时间 >= window_end_time
           2)在[window_start_time,window_end_time)中有数据存在

             第一条数据与第三条数据相差5秒,还没触发窗口,设置延迟2秒,水位线是1642263313000,还没达到条件

            第一条数据与第五条数据相差7秒,水位线是1642263315000,触发窗口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农_程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值