ApacheFlink流处理基础

182 阅读3分钟

第二章 流处理基础

Dataflow图

Dataflow程序描述了数据如何在不同的操作之间流动。Dataflow程序通常表示为有向图。图中顶点称为算子(逻辑Dataflow图称为算子,物理Dataflow图称为任务),表示计算;而边表示数据依赖关系。算子是Dataflow程序的基本功能单元,他们从输入获取数据,对其进行计算,然后产生数据并发往输出供后续处理。没有输入端的算子成为数据源,没有输出端的算子成为数据汇。一个Dataflow图至少有一个数据源和一个数据汇。

  • 至少有一个输入源一个输出汇,是一个有向图;算是Dataflow中基本的功能单元。

  • 从不同的抽象层次将Dataflow分为宏观上的逻辑图和实际运行时的物理结构图

数据并行和任务并行

  • 数据并行:将输入数据分组,让执行同一操作的不同算子实例作用在不同的数据子集上;均衡负载

image.png

  • 任务并行:将输入数据复制多份,交给执行不同操作的算子实例处理

image.png

数据交换策略

数据交换策略定义了如何将数据项分配给物理Dataflow图中的不同任务。常见有如下四种数据交换策略:

  • 转发策略:在发送端任务和接收端任务之间一对一的进行数据传输。如果两端的任务运行在同一物理机器上,可以避免网络通信

image.png

  • 广播策略:把每个数据项发往下游算子的全部任务

image.png

  • 基于键值的策略:根据魔衣键值属性对数据分区,并保证键值相同的数据项会交由同一任务处理

image.png

  • 随机策略:将数据均匀分配至算子的所有任务,以实现计算任务的负载均衡

image.png

并行流处理

  • 延迟:处理一个事件需要的时间;低延迟是流处理的一个关键特性,相比于批处理的收集事件然后处理,显然延迟会低
  • 吞吐:单位事件可以处理事件的数量;吞吐取决于数据到来的速率,不能认为吞吐低性能就差,关注峰值吞吐(系统满负载情况)比较有意义
  • 并行处理可以减少系统峰值时的排队时间,降低了延时,同时也能够够改善吞吐

延迟和吞吐

  • 延迟:处理一个事件所需的时间。本质上,它是从接收事件到在输出中观察到事件处理效果的时间间隔。
  • 吞吐:用来衡量系统处理能力(处理速率)的指标,它告诉我们系统每单位时间可以处理多少事件。如果系统持续以力不能及的高速率接收数据,那么缓冲区可能会用尽,继而导致数据丢失,这种情形同城称为被压。 延迟和吞吐并非相互独立的指标。如果事件在数据处理管道中传输时间太久,我们将难以保证高吞吐;同样,如果系统性能不足,事件很容易堆积缓冲,必须等待一段时间才能处理。

数据流上的操作