8 分钟看完这 7000+ 字,Flink 时间窗口和时间语义这对好朋友你一定搞得懂!外送窗口计算和水印一并搞懂!!!

目录

一、时间语义 & 时间窗口

1. 前摘:

1.1 Flink的时间和窗口

1.2 什么是时间窗口和时间语义呢?

2. 时间窗口

2.1 举个例子:

2.2 3个实时数据计算场景

3. 时间语义

二、Flink上进行窗口计算:

1. 一个Flink窗口应用的大致骨架结构

2. Flink窗口的骨架结构中有两个必须的两个操作:

三、Flink Watermark水印:

1. 举个小例子:

2. 水印的概念:

3. 水印如何计算:

4. 允许延迟和侧道输出:

5. 水印生成策略:

水印策略分为内置水印策略和自定义水印策略:

四、案例以及代码


一、时间语义 & 时间窗口

1. 前摘:

1.1 Flink的时间和窗口

  • 时间对应 时间语义

  • 窗口对应 时间窗口

  • 时间窗口和时间语义密不可分

1.2 什么是时间窗口和时间语义呢?

  • 场景1:电商场景中计算每种商品每1min的累计销售额。

  • 场景2:我们在观看直播时,直播间的右上角会展示最近1min的在线人数,并且每隔1min会更新一次。

  • 场景3:一件商品被推荐给我们时,展示着这个商品累计的销量,并且销量还会不断地更新(假设10s更新一次)。

当我们仔细分析这3个场景中计算的实时指标时,会发现它们都可以被一个统一的计算模型所描述出来,

即:每隔一段时间计算并输出过去一段时间内的数据统计结果。这个统一的计算模型就是时间窗口,

其中的“每隔一段时间计算并输出”、“过去一段时间内的数据”、“统计结果”分别代表了时间窗口的3个重要属性。

  1. 时间窗口的计算频次

  2. 时间窗口的大小

  3. 时间窗口内的数据的处理逻辑

2. 时间窗口

2.1 举个例子:

我们以每1min计算并输出过去1min内所有商品的累计销售额的案例来说明时间窗口计算模型的处理机制。如图1-1所示,输入数据流中的每一个圆圈代表商品的一条销售记录,圆圈内的数字代表商品销售额。那么按照时间窗口的计算模型的3个属性来剖析这个需求就得到时间窗口的计算频次为1min,时间窗口的大小为1min,时间窗口内的数据的处理逻辑是将商品销售额求和。接下来,按照时间窗口计算模型的计算的话,步骤总共分为以下3步。

  1. 第一步,按照1min的时间窗口大小来划分窗口,将输入数据流按照1min的粒度划分为一个一个的大小为1min的窗口。如图5-1中阴影部分所示,假设销售额为3和4的数据的时间分别为9:01:03和9:02:56,那么这两条数据会分别被划分到[9:01:00, 9:02:00)和[9:02:00, 9:03:00)两个窗口中。

  2. 第二步,按照1min的时间窗口计算频次来触发窗口内数据的计算,每过1min,会计算过去1min的窗口内的数据。举例来说,当时间到达9:02:00时,会触发[9:01:00, 9:02:00)窗口内的数据的计算。

  3. 第三步,当窗口触发计算后,对窗口内所有数据的销售额进行求和。举例来说,当[9:02:00, 9:03:00)的窗口触发计算时,对所有数据销售额求和会得到9,最后将结果输出,输出数据流中每一条数据都是当前这1min内商品的总销售额。

注意: 左开右闭的区间[9:01:00,9:02:00)用于描述时间范围为大于等于9:01:00和小于9:02:00的时间窗口。

2.2 3个实时数据计算场景

在看完了上述案例之后,相信大家对时间窗口计算模型已经有了初步的了解。接下来,我们再使用时间窗口计算模型重新描述一下开头提到的3个实时数据计算场景,会得到表1-2。

表1-2 使用时间窗口计算模型描述实时数据计算场景

通过表1-2可以发现,使用时间窗口计算模型来描述这些指标的口径后,这3种实时计算场景中指标的计算逻辑会变的清晰且标准。值得一提的是,当我们将场景范围进一步扩大时,会发现大部分的实时指标,包括离线指标的计算过程都符合时间窗口计算模型。比如每天计算一次过去一天的商品GMV(商品交易总额),每小计算一次过去24小时GMV,这些离线指标的计算过程都可以用时间窗口计算模型来描述。

在明确了时间窗口计算模型的计算过程之后,接下来我们就要实际上手开发一个时间窗口的应用了,当我们想使用Flink大干一场时,却发现只用时间窗口来定义和描述指标口径还存在一个问题,这个问题就和本章的另一个重点——时间语义息息相关了。先总结一下这个问题:当我们按照时间窗口计算模型处理数据时,是使用数据真实发生的时间来计算,还是使用数据到达Flink时间窗口算子SubTask时的本地机器时间来计算呢?

其中以哪种时间用作时间窗口的计算就是时间语义要讨论的问题。

3. 时间语义

  • 事件时间:事件发生时(数据产生时)的时间

  • 处理时间:数据到达SubTask的本地机器时间

我们以上述场景2中的直播间同时在线人数为例,如图2-1所示,A、B两名用户分别在9:01:50和9:02:00观看了一场直播,并上报了两条观看直播的数据,但是由于网络传输存在延迟,这两条数据分别在9:03:00和9:03:01才到达Flink的SubTask中。

在上面这个场景中,一条数据出现了两个不同的时间࿰

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值