Flink中TaskManager、Slot和Parallelism

概念简介

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的理解 - 简书

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值