Dataflow编程模型

Dataflow图

  • Dataflow逻辑图
    有向图,顶点表示算子,边表示数据依赖关系。没有输入端的算子为数据源,没有输出端的算子为数据汇。一个Dataflow图至少有一个数据源和数据汇。为了执行Dataflow程序,我们需要将逻辑图转为物理图。
  • Dataflow物理图
    在物理图中顶点表示任务,逻辑图中的一个算子,在物理图中可能会分成多个并行算子任务进行执行,每个任务负责计算一部分输入数据。

数据并行和任务并行

  • 数据并行
    将数据进行分组,然后用相同的方法对数据进行处理。比如统计一个网站男女的pv,可以先对性别进行分组,然后对各个组的数据进行累加处理。结合Dataflow物理图来看的话就是一个任务的下游有两个任务。
  • 任务并行
    将单一的任务拆成几部分,这几个部分的任务并行执行。比如一个任务C为(1+1)*(2+2),可以拆成任务A(1+1)和任务B(2+2),A和B可以并行执行提高效率。结合Dataflow物理图来看的话就是一个任务的上游有两个任务。

数据交换策略

数据交换策略定义了如何将Dataflow物理图中任务到任务之间数据的传输,有下面几种转发策略。

  • 转发策略
    发送端任务和接受端任务一对一
  • 广播策略
    发送端任务会将数据广播到下游每一个接收端任务
  • 基于键值策略
    发送端任务会将数据根据某一键值属性进行分区,保证键值相同的数据会交给同一个下游接收端任务。
  • 随机策略
    发送端任务会将数据均匀分配给下游接收端所有任务。

并行流处理

如何利用Dataflow编程范式并处理无线数据流

延迟和吞吐
  • 延迟
    延迟表示处理一个事件所需时间,也就是说从接受事件到在输出中观察到事件处理效果的时间间隔。
  • 吞吐
    吞吐表示系统处理能力(处理速率)的指标,也就是说系统每单位时间可以处理多少事件。

由上可见延迟和吞吐是相互影响的,当延迟低的时候,吞吐量自然就会上去。所有我们可以通过并行处理多条数据流来降低数据处理的延迟时间。

数据流上的操作

通过对数据流的操作来实现数据流的获取、转换以及输出。这些操作可以分为无状态的操作和有状态的操作。有状态的操纵可能需要维护之前接受事件的信息,比较复杂,而无状态的操作相对较简单。

  • 数据接入和数据输出
    数据接入操作逻辑的算子称为数据源,负责数据输出的算子称为数据汇。
  • 转换操作
    转换操作是一类"只过一次"的操作,处理分一个到来的事件,产生一条新的数据流。
  • 滚动聚合
    滚动聚合会根据事件的到来不断更新聚合的结果,聚合操作都是有状态的,通过新来的事件合并到已有状态来生成更新后的聚合值。聚合函数必须满足可结合和可交换的条件,否则算子就需要存储整个流的历史纪录。
  • 窗口操作
    窗口操作会持续创建一些称为"桶"的有限事件集合,并允许我们基于这些有限集进行计算。窗口的行为是由一系列策略定义的,这些窗口策略决定了①什么时间创建桶②事件如何分配到桶中③桶内数据什么时间参与计算。
    1.滚动窗口
    将事件分配到长度固定且互不重叠的桶中。分为基于时间和基于数量的滚动窗口
    2.滑动窗口
    将事件分配到长度固定且允许重叠的桶中。分为基于时间和基于数量的滑动窗口
    3.会话窗口
    会话由发生在相邻时间内的一系列事件外加一段非活动时间组成。将同一会话的事件分配到相同桶中,会话窗口会根据会话间隔将事件分为不同的会话。

时间语义

  • 处理时间
    处理时间是当前流处理算子所在机器上的本地时钟时间。
  • 事件时间
    事件时间是数据流中事件实际发生的时间。
  • 水位线
    水位线是一个全局进度指标,表示我们确信不会再有延迟事件到来的某个时间点。本质上,水位线提供了一个逻辑时钟,用来通知系统当前的事件时间。当一个算子接收到时间为T的水位线,就可以任务不会再收到任何时间戳小于或等于T的事件了。

状态和一致性模型

任务故障

对于输入流的每个事件,任务都需要执行这几个步骤①接受事件并将它们存在本地缓冲区②选择性地更新内部状态③产生输出记录。这几个步骤都可能导致任务故障。

结果保障

保障流处理引擎内部状态的一致性

  • 至多一次
    每个事件对内部的状态的更新最多一次,相当于没有保障。
  • 至少一次
    每个事件对内部的状态的更新至少一次,需要支持数据重放机制。
  • 精确一次
    每个事件对内部的状态的更新都只有一次,如同故障没有发生一般,需要支持数据重放机制。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值