知识卡片

任务槽的资源隔离与共享机制

专业/工作 · 500.b.2

内容

一个TaskManager本质上是一个独立的JVM进程,内部划分出若干任务槽(Slot),每个槽独立抢占这个进程的一部分托管内存——比如一个TaskManager有3个槽,每个槽默认平均分到1/3的托管内存,槽与槽之间在内存上互不竞争。但要注意这种隔离目前只覆盖内存,并不对CPU做隔离,多个槽仍然共享同一个进程的CPU资源。更进一步,Flink允许来自同一个作业的不同算子的子任务共享同一个槽(Slot Sharing),这样调度器可以把一条流水线上所有环节的子任务尽量塞进有限的槽里并发执行,让整个作业实际能达到的最大并行度等于集群里槽的总数,而不是被”每个算子必须单独占一个槽”这种限制卡死。槽数量因此决定了一个TaskManager最多能同时承载多少个子任务,是资源规划时的核心约束。

参考来源

《Flink入门与实战》第8章《并行》