前言 html
本文主要是想简要说明Flink在集群部署、任务提交、任务运行过程当中资源状况,若表述有误欢迎大伙留言分享,很是感谢!apache
1、集群部署阶段session
集群部署这里指的是Flink standalone模式,由于在Yarn模式(包括session、single job模式也成Per-job模式)是能够仅经过Flink client提交任务到Yarn上,因此是否手动部署Flink集群对任务的执行是没有影响的。下图[1]是简单的Flink的集群构成状况,包括一个master(JobManager)、两个worker(TaskManager)。至于Flink standalone模式的HA(通常有两个JobManager加上若干个TaskManager组成)是经过zookeeper实现的,其主要思想是经过zookeeper选举出JobManager的active节点,该结点负责资源分配等,另外一个节点为standby。Flink的Yarn模式的高可用的经过在container中对JobManager的重启实现的,其具体过程在此不详细说明。spa
部署阶段主要有如下两个参数:code
1 #每一个TaskManager中slot的个数,在conf/flink-conf.yaml中,默认为1 2 taskmanager.numberOfTaskSlots 3 #任务的并行度,默认为1 4 parallelism.default
1)taskmanager.numberOfTaskSlots:每一个TaskManager中slot的数量,官方文档推荐:和每一个TaskManager中物理CPU的个数成比例,好比:等于CPU的个数,或者是CPU个数的一半;htm
2)parallelism.default:任务的并行度,默认值为1,该值能够经过在程序中设定setParallesim()改变,并行度与slot的关系见下详解;blog
2、任务提交阶段内存
Flink集群资源的使用状况除了和已分配的资源有关外,还与并行度有关,已分配的资源表示Flink能够利用这么多资源,而实际能利用多少资源还和并行度有关。任务并行度的最大值由TaskManager集群的Slot总数决定,如:slot总数为10,则任务最大的并行度为10.ci
在standalone模式中,Flink任务能利用的总资源已在启动集群时肯定,其并行经过在执行./flink run 时,经过可选参数[-p]肯定(不指定则为默认值1)。资源
在Yarn模式中,均是先Yarn集群中分配资源给新建的Flink集群,以下图,其详细过程见文档[2]。
Flink的Yarn模式session、single job模式在实现方法上仍是存在必定的区别:
1)session模式是先利用yarn-session.sh在yarn新建一个Flink集群,而后利用./flink run flinkExample.jar提交任务,其资源分配的方式和standalone模式一致;
./yarn-session.sh -n 4 -s 8 -jm 3072 -tm 32768
-n:在yarn上分配了4个container,即分配了4个TaskManager;
-s:每一个TaskManager有8个slot;
-jm:每一个JobManager中的内存数;
-tm:每一个TaskManager中的内存数;
2)single job模式在命令中在申请资源的同时,提交任务,经常使用命令以下:
./flink run -m yarn-cluster -yn 7 -ys 8 example.jar
-yn:yarn上分配的container个数,即TaskManager的个数;
-ys:每一个TaskManager中slot的个数
其余参数的具体使用方法能够在控制台中执行./flink、./yarn-session.sh获得说明。
说明:session模式和single job的区别:
1)session模式:Flink任务运行结束后,从yarn上申请到的资源是不被释放的,等待下一个Flink的提交,相似一个常住在yarn上永远不会结束的yarn任务。由于,yarn的资源分配模式中好比fair策略仍是存在资源的竞争的,session模式资源的不释放性,这样能够在Yarn提供资源分配上的基础上进行实现资源隔离,也实现了对集群物理环境的屏蔽,但在必定的程度上形成了资源的浪费;
2)single job模式和通常的yarn任务同样,任务结束后就会释放申请到的资源,使资源获得重复利用。
因此session、single job模式的实际应用应根据需求使用,通常状况下:
single job模式是按需申请资源,通常适合执行时间较长的大任务。此外,该模式下,每次提交任务都需单独启动Flink集群本身的ResourceManager会形成必定的时延;
session模式共享资源,通常适合执行时间短的小任务。此模式下,会共享ResourceManager,因此启动快。
【说明】这里所说的ResourceManager不是Yarn的组件,是Flink自己的,关于深层的分析,见后续博客。
3、任务运行阶段
假定一个3个TaskManager的集群,每一个TaskManager有3个slot,集群一个9个slot,从下图中能够获得[3]:任务的并行度为1时,只会用一个slot,并行度为2会用2个slot,依次类推,当并行度为9时,9个slot都会被利用,固然从example4中可知,能够针对不一样的算子(operator)定义并行度。
Ref:
[1]https://ci.apache.org/projects/flink/flink-docs-release-1.6/ops/deployment/cluster_setup.html
[2] https://ci.apache.org/projects/flink/flink-docs-release-1.6/ops/deployment/yarn_setup.html
[3]https://ci.apache.org/projects/flink/flink-docs-release-1.6/ops/config.html