时间语义介绍

介绍

在流数据处理应用中,一个很重要、也很常见的操作就是窗口计算。所谓的“窗口”,一
般就是划定的一段时间范围,也就是“时间窗”;对在这范围内的数据进行处理,就是所谓的
窗口计算。所以窗口和时间往往是分不开的。

Flink 中的时间语义

在这里插入图片描述
我们来梳理一下流式数据处理的过程。如图所示,在事件发生之后,生成的数据被收
集起来,首先进入分布式消息队列,然后被Flink系统中的Source算子读取消费,进而向下游
的转换算子(窗口算子)传递,最终由窗口算子进行计算处理。
很明显,这里有两个非常重要的时间点:一个是数据产生的时间,我们把它叫作“事件时
间”(Event Time);另一个是数据真正被处理的时刻,叫作“处理时间”(Processing Time)。
我们所定义的窗口操作,到底是以那种时间作为衡量标准,就是所谓的“时间语义”(Notions
82
of Time)。由于分布式系统中网络传输的延迟和时钟漂移,处理时间相对事件发生的时间会有
所滞后。

1. 处理时间(Processing Time)

处理时间的概念非常简单,就是指执行处理操作的机器的系统时间。
在这种时间语义下处理窗口非常简单粗暴,不需要各个节点之间进行协调同步,也不需要
考虑数据在流中的位置,简单来说就是“我的地盘听我的”。所以处理时间是最简单的时间语义。

2. 事件时间(Event Time)

事件时间,是指每个事件在对应的设备上发生的时间,也就是数据生成的时间。
数据一旦产生,这个时间自然就确定了,所以它可以作为一个属性嵌入到数据中。这其实
就是这条数据记录的“时间戳”(Timestamp)。
在事件时间语义下,我们对于时间的衡量,就不看任何机器的系统时间了,而是依赖于数
据本身。但是由于分布式系统中网络传输延迟的不确定性,实际应用中我们要面对的数据流往
往是乱序的。在这种情况下,就不能简单地把数据自带的时间戳当作时钟了,而需要用另外的
标志来表示事件时间进展,在Flink中把它叫作事件时间的“水位线”(Watermarks)。

哪种时间语义更重要

1. 从《星球大战》说起

在这里插入图片描述

2. 数据处理系统中的时间语义

在计算机系统的实际应用中,事件时间语义会更为常见。一般情况下,业务日志数据中都
会记录数据生成的时间戳(timestamp),它就可以作为事件时间的判断基础。

3. 两种时间语义的对比

通常来说,处理时间是我们计算效率的衡量标准,而事件时间会更符合我们的业务计算逻
辑。所以更多时候我们使用事件时间;不过处理时间也不是一无是处。对于处理时间而言,由
83
于没有任何附加考虑,数据一来就直接处理,因此这种方式可以让我们的流处理延迟降到最低,
效率达到最高。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值