美文网首页
Flink资源管理单元TaskSlot的理解

Flink资源管理单元TaskSlot的理解

作者: 伯仲之元 | 来源:发表于2020-04-27 22:45 被阅读0次

    TaskSlot的理解

    TaskSlot是Flink中最小的资源管理单元,它仅均分TaskManager上的内存,但不隔离CPU。例如图中,每个TaskManager上面有3个TaskSlot,那么意味着每个TaskSlot有三分之一TaskManage内存。

    Flink的Job逻辑会被分为一个一个的Task,在资源分配上,Flink保证Task的每个并行度一定有个TaskSlot使用。例如图中,source/map组成的Task的并行度为2,它就分别占用两个TaskManager上各一个TaskSlot。

    同一个TaskManager上面的多个TaskSlot它们共享一个TCP连接、心跳、以及一些数据集和数据结构。避免每个TaskSlot都维护这些东西,导致资源浪费。

    image-20200426221319803.png

    由于TaskSlot并不隔离CPU,因此一般情况上可以配置TaskSlot的个数等于CPU核数+1,充分利用线程。

    TaskSlot的共享

    TaskSlot是可以共享的,前提是同一个Job的多个Task,那么其中几个Task是可以共享使用同一个TaskSlot的。例如图中,source/map,keyBy/windows/appy,sink这三个Task共享使用了一个TaskSlot。

    image-20200426223126275.png

    这种共享方式主要有两个优点:

    1. 提高资源利用率。以source/map,keyBy/windows/appy,sink这三个Task共享一个TaskSlot为例。如果没有TaskSlot共享,那么source/map就会独立占用一个TaskSlot,而source/map操作并不是一个资源密集型逻辑,就会造成一个TaskSlot资源空闲。相反keyBy/windows/apply却是一个资源密集逻辑,需要比较多的资源(内存和CPU),但此时缺要分配额外的一个TaskSlot去跑,而不是去使用空闲的资源,这时就造成了资源浪费。

    2. 无需关心一个Job有几个Task从而去计算需要几个TaskSlot。如果没有TaskSlot共享,那么为了最大程度上提高Flink Job的运行性能,就必须要去计算我需要配置几个TaskSlot(因为一个Task独占一个TaskSlot),此时用户就需要去计算我需要配置几个TaskSlot。而在有了TaskSlot共享的基础上,Flink会保证TaskSlot的数量一定是等于Job的最大并发数,每个TaskSlot至少一个Task使用。此时,用户要考虑的仅仅是如何设置TaskSlot数量,保证CPU被充分利用,以及内存被适度均分。

    为了保证TaskSlot个数等于最大并行度,Flink会进行一个计算Parallism/TaskSlot取上整,判定需要起几个TaskManager,比如下面2种配置方法:

    • TaskSlot < Parallism。那么TaskManager的个数一定大于1个,例如2个TaskSlot,6个Parallism,就会有3个TaskManager。此时需要注意集群整体内存情况,每个TaskManager都会有一样大的内存。虽然通过taskmanager.memory.process.size配置的内存不大,但是由于TaskManager的数量变多了,整个Flink集群就会申请很多内存了,所以要避免因申请内存过大而被资源管理器拒绝申请。
    • TaskSlot>=Paramllism。这个时候必然只有1个,因为一个TaskManager的TaskSlot个数足以保证最大并行度。

    相关文章

      网友评论

          本文标题:Flink资源管理单元TaskSlot的理解

          本文链接:https://www.haomeiwen.com/subject/gtmpwhtx.html