flink

Flink 架构

2020-08-28  本文已影响0人  Rex_2013

1.Flink 运行时的角色

Flink系统架构中包含了两个角色,分别是JobManager和TaskManager,是一个典型的Master-Slave架构。JobManager相当于是Master,TaskManager相当于是Slave。


Anatomy of a Flink Cluster

Clinet 负责将当前的任务提交给JobManager,提交任务的常用方式:命令提交、web页面提交。当Client提交任务之后,客户端可以断开连接(detached mode),也可以保持连接状态来接收任务的报告(attached mode)。
JobManager和TaskManager启动方式,standalone 集群模式,或者交给资源管理器如YARNMesos)进行管理。


1.1 JobManager(JVM进程)作用

note: 在一个集群中只能由一个正在工作(active)的JobManager,如果HA集群,那么其他JobManager一定是standby状态
主要包含三个不同的组件:ResourceManager、Dispatcher、JobMaster


1.1.1: ResourceManager 资源管理器

1.1.2: Dispatcher 分发器

1.1.3: JobMaster

1.2 TaskManager(JVM进程)作用

note: 至少需要一个TaskManager。TaskManager中资源调度的最小单位是Task Slot。TaskManager中Task Slot的最大数量就是并发处理任务的最大数量,当设置的并行度大于总的Task Slot,程序会报错。请注意,多个operators 算子可以在一个Task Slot中执行

2. 任务提交流程

Flink and YARN interact
  1. Client首先检查所请求的资源(ApplicationMaster的内存和vcore)是否可用,Client向HDFS上传Flink的Jar包和配置
  2. 之后向Yarn ResourceManager提交任务,请求 APPMaster Container
  3. ResourceManager分配Container资源并通知对应的NodeManager启动ApplicationMaster。ApplicationMaster启动后加载Flink的Jar包和配置构建环境,然后启动JobManager
  4. 之后ApplicationMaster向ResourceManager申请资源启动TaskManager,ResourceManager分配Container资源后,由ApplicationMaster通知资源所在节点的NodeManager启动TaskManager,NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager,TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务。

3. Distributed Runtime Environment


3.1 Tasks Parallelism and Operator Chains 并行度和任务链

3.1.1 Tasks Parallelism

image.png

Stream在算子之间传输数据的形式可以是one-to-one(forwarding)的模式也可以是redistributing的模式,具体是哪一种形式,取决于算子的种类。

3.1.2 Operator Chains、

相同并行度的one to one操作,Flink这样相连的算子链接在一起形成一个task,原来的算子成为里面的一部分。将算子链接成task是非常有效的优化:它能减少线程之间的切换和基于缓存区的数据交换,在减少时延的同时提升吞吐量。链接的行为可以在编程API中进行指定。
要形成算子链 并行度相同、并且是 one-to-one 操作,两个条件缺一不可


image.png

3.2 TaskManger、Slots与 source

slot sharing

举个例子:
Task Slot是静态的概念,是指TaskManager具有的并发执行能力,可以通过参数taskmanager.numberOfTaskSlots进行配置;而并行度parallelism是动态概念,即TaskManager运行程序时实际使用的并发能力,可以通过参数parallelism.default进行配置。
也就是说,假设一共有3个TaskManager,每一个TaskManager中的分配3个TaskSlot,也就是每个TaskManager可以接收3个task,一共9个TaskSlot,如果我们设置parallelism.default=1,即运行程序默认的并行度为1,9个TaskSlot只用了1个,有8个空闲,因此,设置合适的并行度才能提高效率。


并行度优化前 并行度优化后

4.执行图(ExecutionGraph)

由Flink程序直接映射成的数据流图是StreamGraph,也被称为逻辑流图,因为它们表示的是计算逻辑的高级视图。为了执行一个流处理程序,Flink需要将逻辑流图转换为物理数据流图(也叫执行图),详细说明程序的执行方式。
Flink 中的执行图可以分成四层:StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图

参考 flink 官网 Flink Architecture
flink 官网 Clusters & Deployment YARN
flink 官网 release-1.10 runtime

上一篇 下一篇

猜你喜欢

热点阅读