当前位置: 首页 > article >正文

【Flink】核心概念:任务槽(Task Slots)

任务槽

每个 worker(TaskManager)都是一个 JVM 进程,可以在单独的线程中执行一个或多个 subtask。为了控制一个 TaskManager 中接受多少个 task,就有了所谓的 task slots(至少一个)。

每个任务槽(task slot)其实表示了TaskManager拥有计算资源的一个固定大小的子集。这些资源就是用来独立执行一个子任务的
请添加图片描述

任务槽数量的设置

flink-conf.yaml 可以设置TaskManager的slot数量,默认是1个slot。

taskmanager.numberOfTaskSlots: 8

在这里插入图片描述

任务对任务槽的共享

默认情况下,Flink 允许 subtask 共享 slot,即便它们是不同的 task 的 subtask,只要是来自于同一作业即可。结果就是一个 slot 可以持有整个作业管道。允许 slot 共享有两个主要优点:

  • Flink 集群所需的 task slot 和作业中使用的最大并行度恰好一样。无需计算程序总共包含多少个 task(具有不同并行度)。
  • 容易获得更好的资源利用。如果没有 slot 共享,非密集 subtask(source/map())将阻塞和密集型 subtask(window) 一样多的资源。通过 slot 共享,我们示例中的基本并行度从 2 增加到 6,可以充分利用分配的资源,同时确保繁重的 subtask 在 TaskManager 之间公平分配。

在这里插入图片描述

手动设置“slot 共享组”

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

.map(word -> Tuple2.of(word, 1L)).slotSharingGroup("1");

这样,只有属于同一个slot共享组的子任务,才会开启slot共享;不同组之间的任务是完全隔离的,必须分配到不同的slot上。在这种场景下,总共需要的slot数量,就是各个slot共享组最大并行度的总和。

任务槽与并行度的关系

整个流处理程序的并行度,就应该是所有算子并行度中最大的那个,这代表了运行程序需要的slot数量。


http://www.kler.cn/a/135061.html

相关文章:

  • 【121. 买卖股票的最佳时机】——贪心算法/动态规划
  • Unity学习笔记(4):人物和基本组件
  • 《新智慧》期刊的征稿范围主要包括哪些方面?
  • Flink_DataStreamAPI_输出算子Sink
  • python装饰器的使用以及私有化
  • stringUtils详细解释
  • 如果重复定义宏,两个值不同,最终的值是哪一个?
  • 澳洲猫罐头真实水平如何?我家亲自喂养过的优质猫罐头推荐给大家
  • leetcode算法之分治-快排
  • WhatsApp新营销全解:如何才能真正留住你的客户
  • ceph学习笔记
  • 吴恩达《机器学习》9-1:代价函数
  • 【人工智能实验】A*算法求解8数码问题 golang
  • Kotlin学习(一)
  • 图像分类(三) 全面解读复现VGGNet
  • LeetCode100131. Make Three Strings Equal
  • OSCP系列靶场-Esay-DC-1
  • 在 Qt 框架中,有许多内置的信号可用于不同的类和对象\triggered
  • 数据结构【DS】数组
  • IDEA常用插件合集
  • 产业区块链生态日:你的故事,我们在等待 | 征集帖
  • 软文推广如何实现效果?媒介盒子为你支招
  • 选择java商城开发商需要注意哪些方面?
  • Web前端—小兔鲜儿电商网站底部设计及网站中间过渡部分设计
  • Vue 路由缓存 防止路由切换数据丢失 路由的生命周期
  • 虾皮台湾站点如何选品