流式数据架构理论 ◆ 基本概念

基本概念

流是一种为无界数据集设计的数据处理引擎,这种引擎具备以下特征:
(1)具备强一致性,即支持 exactly-once 语义
(2)提供丰富的时间工具,如事件时间、处理时间、窗口
(3)保证系统具有可弹性、伸缩性。
(4)同时保证高吞吐、低延迟与容错。
(5)支持高层语义,如流式关系型API(SQL)、复杂事件处理(CEP,Complex Event Processing)。

时间

在流式数据处理理论中,经常使用事件或记录表示从所处理的数据集中拉取的数据,在Flink中通常以有结构的对象表示时间。
在无界数据处理中,主要有两类时间概念。
(1)事件时间(Event Time):事件实际发生的时间。
(2)处理时间(Processing Time):事件被处理的事件

并不是所有的应用场景都关注事件事件,但其重要性是不言而喻的。例如,在用户行为特征分析、异常检测、基于信贷历史的风控模型等分析中,事件时间起到了决定性的作用。

窗口

窗口(window)是将(有界或无界)数据集拆分成一个个有限长度数据区间的机制,即在数据集中增加临时处理边界,用于将事件按照时间或其他特征分组分析,其中临时这个定语说明窗口并没有物理地改变数据集。通常由三类窗口:
(1)滚动窗口(Tumbling Window):将时间拆分成固定长度(window size)。
(2)滑动窗口(Sliding Window):按照滑动步长(window slide)将时间拆分成固定的长度,当滑动步长小于窗口长度时,相邻窗口间会有重叠。
(3)会话窗口(Session Window):以活动时间间隔为边界,将一系列连续事件拆分到不同的会话中。会话窗口的长度是动态的。

水印

水印(watermark)是嵌入在事件时间轴上用于判断事件时间窗口内所有数据均已到达引擎的一种时间推理工具,是一种既可以在流处理引擎侧嵌入,又可以在消息系统侧嵌入的时间戳。
水印的语义是事件时间小于水印标记时间的事件不会再出现,因此水印是事件的推进器(metric of progress)。
时间穿梭是另一个相关概念。用于调试或审计目的,数据处理程序有时需要将事件时间倒回至过去某个时间点重新开始数据处理任务。

触发器

触发器(trigger)决定在窗口的什么时间点启动应用程序定义的数据处理任务。
水印迟到会拉长窗口生存期,水印早到会导致数据处理结果不准确,触发器就是为了解决这两个问题而被引入的。

数据处理模式
  1. 有界数据处理
    通常,我们使用批处理引擎处理有界数据集(尽管流处理引擎也具备这个功能)。

  2. 无界数据批处理
    在流处理引擎没有出现之前,业界经常使用窗口机制将无界数据集分割成一系列有界数据块,使用批处理方式分析每个数据块,即微批处理模式。

  3. 无界数据流式处理
    基于微批模式的无界数据批处理的原理是,将多个微批处理任务串连起来构建流式数据处理任务,这通常是以牺牲延迟和吞吐为代价的。解决这种缺陷是流式处理引擎的发展目标之一,解决方案建立在分析
    无界数据集的无序和事件时间偏差特性的基础上。
    (1)无序意味着引擎需要时间处理机制。
    (2)事件时间偏差意味着引擎不能假定在某个时间窗口内能够观察到所有事件。
    下面分4种情况分析无界数据的流式处理模式。

    1. 时间无关
      流处理引擎能成功应用于需要时间机制的输出任务中,也能用于解决与时间无关的数据处理任务,如过滤、数据源连接。
      (1)过滤:用于过滤给定规则的事件,如从网站后台日志中过滤出给定源地址的请求。
      (2)连接:将两个数据源中相关联的记录连接成一条记录。

    2. 近似计算
      近似计算是另一种与时间无关的流式数据处理应用,优点是系统开销小。由于算法过于复杂,这类流式数据处理模式应用范围较窄。

    3. 根据处理时间开滚动窗口
      这种窗口是根据事件被观察的时间设计的,优点有以下三个。
      (1)使用起来简单
      (2)窗口边界易于确定
      (3)易于提供与事件时间无关的语义

    4. 根据事件时间开滚动窗口
      事件时间窗口提供了更灵活的机制,但与处理时间窗口相比,事件时间窗口通常需要更长的生存期,这会给引擎的架构设计带来诸多挑战。
      例如需要大容量的缓存以持久化状态;窗口边界难以确定,事件迟到导致确定窗口结束点比较困难。

如何理解流式数据架构存在的内在机制(what?where?when?how?)

  • what: 定义数据处理是什么,即对数据进行怎样的转换操作,如Spark的算子
  • where:定义转换操作的输入数据取自什么时间区间,窗口是这个问题的答案
  • where:定义转换操作发生在时间轴的什么时间点,水印和触发器是这个问题的答案
  • how:定义如何刻画同一窗口内多次转换操作结果的关系,累加模式是这个问题的答案

其中,转换操作有时也用聚合替代,转换内涵更丰富,而聚合用于在数据集(如窗口)上计算某个值的场合(如窗口内数据的求和)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值