Apache Flink 任务 Tasks 和任务槽 Task Slots

目录

任务槽(Task Slots)

任务槽数量的设置

任务对任务槽的共享

任务槽和并行度的关系


任务槽(Task Slots)

        Flink 中每一个 worker(也就是 TaskManager)都是一个 JVM 进程,它可以启动多个独立的线程,来并行执行多个子任务(subtask);
        为了控制并发量,我们需要在 TaskManager 上对每个任务运行所占用的资源做出明确的划分,这就是所谓的任务槽(task slots);
        每个任务槽(task slot)其实表示了TaskManager拥有计算资源的一个固定大小的子集。这些资源就是用来独立执行一个子任务的。

Apache Flink 任务 Tasks 和任务槽 Task Slots_第1张图片

任务槽数量的设置

        我们可以通过集群的配置文件来设定 TaskManager 的 slots 数量:

taskmanager.numberOfTaskSlots: 8

        通过调整 slots 的数量,我们就可以控制子任务之间的隔离级别。需要注意的是,slots 目前仅仅用来隔离内存,不会涉及 CPU 的隔离。

任务对任务槽的共享

Apache Flink 任务 Tasks 和任务槽 Task Slots_第2张图片

        默认情况下,Flink 允许子任务共享 slots。如图 4-14 所示,只要属于同一个作业,那么对于不同任务节点的并行子任务,就可以放到同一个 slot 上执行。

        如果希望某个算子对应的任务完全独占一个 slot,或者只有某一部分算子共享 slots,我们也可以通过设置“slot 共享组”(SlotSharingGroup)手动指定:

.map((_,1)).slotSharingGroup(“1”);

        这样,只有属于同一个 slot 共享组的子任务,才会开启 slots 共享;不同组之间的任务是完全隔离的,必须分配到不同的 slots 上。

任务槽和并行度的关系

        slots 和并行度确实都跟程序的并行执行有关,但两者是完全不同的概念。简单来说,task slots 是 静 态 的 概 念 , 是 指 TaskManager 具 有 的 并 发 执 行 能 力 , 可 以 通 过 参 数taskmanager.numberOfTaskSlots 进行配置;而并行度(parallelism)是动态概念,也就是TaskManager 运行程序时实际使用的并发能力,可以通过参数 parallelism.default 进行配置。

Apache Flink 任务 Tasks 和任务槽 Task Slots_第3张图片

Apache Flink 任务 Tasks 和任务槽 Task Slots_第4张图片

Apache Flink 任务 Tasks 和任务槽 Task Slots_第5张图片

你可能感兴趣的:(Apache,Flink,flink,大数据)