概念简介
JobManager:负责接收Flink Client提交的Job,并将Job分发到TaskManager执行,一个JobManager包含一个或多个TaskManager。
TaskManager:负责执行Client提交的Job。每个TaskManager可以有一个或多个slot,但slot的个数不能多于cpu-cores。
slot:slot是Flink任务的最小执行单位,并行度上限不能大于slot的数量。slot是可以
数量设置
slot数量:slot的数量一般小于等于TM可用的cpu-core的数量,默认是1,也可以自定义。
并行度数量:代表算子实际运行的并行度,一般会在代码运行环境中指定,默认是4。
TaskManager:在Yarn集群中Job分离模式下,TM的数量=并行度/slot数量(向上取整)。
Flink on Yarn的两种方式:Flink on Yarn两种运行模式详解_LBJ_小松鼠的博客-CSDN博客_flinkjob分离模式配置
举个例子:
如果算子并行度为30,每个TM的slot数量设置为4,那么TM数量=30/4(向上取整)= 8 个,显然这种情况会有2个slot被浪费了,所以可以将并行度设置为32。
slot和TM的数量不都是越多越好,TM过多会增加TM之间数据交换的开销,过少如果集中访问state会导致磁盘开销过大。
参数设置
slot设置:默认 taskmanager.numberOfTaskSlots=1;
parallelism:
- 在以shell的方式提交flink job的时候,可以使用
-p
指定程序的并行度;./bin/flink run -p 10 ../word-count.jar
- 在flink job程序内设置并行度(算子不单独指定并行度,则以此为准)
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setParallelism(10);
- 算子并行度
data.keyBy(new xxxKey()) .flatMap(new XxxFlatMapFunction()).setParallelism(5) .map(new XxxMapFunction).setParallelism(5) .addSink(new XxxSink()).setParallelism(1)
并行度设置优先级:算子设置并行度 > env 设置并行度 > 配置文件默认并行度
参考:flink taskmanager slot 并行度 数量关系_思不凡的人生的博客-CSDN博客_slot和tm的关系
https://jifei-yang.blog.csdn.net/article/details/104388491
Flink--对parallelism 和 slot的理解 - 简书