手机网站技巧,网络运维必备知识,女孩子奖励自己的资料,o2o免费网站建设一、任务槽#xff08;task slots) Flink的每一个TaskManager是一个JVM进程#xff0c;在其上可以运行多个线程#xff08;任务task#xff09;#xff0c;那么每个线程可以拥有多少进程资源呢#xff1f;任务槽就是这样一个概念#xff0c;对taskManager上每个任务运行…一、任务槽task slots) Flink的每一个TaskManager是一个JVM进程在其上可以运行多个线程任务task那么每个线程可以拥有多少进程资源呢任务槽就是这样一个概念对taskManager上每个任务运行所占用的资源做出明确的划分即每个任务槽就表示了TaskManager拥有计算资源的一个固定大小的子集。
二、任务槽数量的设置 一个slot独享taskManager意味着更高的隔离级别任务彼此之间影响降低多个slot则能共享TCP连接、心跳信息、数据集等 减少了每个任务的运行开销在降低隔离级别时提高了性能。 可以通过taskmanager.numberOfTaskSlots参数来设置slot数量最好设置为Cpu核数因为slot仅仅用来隔离内存避免不同任务对cpu的竞争。
三、共享slot 对于不同任务节点的子任务Flink允许它们共享slot。即每个任务节点的子任务一字排开占据不同的slot 不同任务节点的子任务可以共享slot。 那么为什么要共享slot呢引文不同任务节点所需资源是不同的有些是资源密集型有些是资源非密集型。设想这样一种情况在不共享时有三个任务节点source/map这里由于并行度一致所以合并算子链了、widdow、sink其中window是资源密集型的那么当大量数据到来时source/map和sink都可以很快完成但window任务耗时很久于是下游的sink任务所占据的slot就会因为等待而闲置而上游的source/map任务也会因为数据积压而产生背压从而资源开始等待这样资源的利用效率就会大大降低。 解决这一问题的思路就是共享slot在一个slot上同时存在资源密集型和非密集型任务它们自由分配对资源的占用比例即将资源密集型任务平均分配到每一个slot从而提升资源利用率。 默认情况下由于同一任务节点的并行子任务不能共享slot所以slot的数量就取决于所有算子并行度的最大值。当然也可以通过slotSharingGroup手动指定共享slot。
四、并行度和slot的关系 slot是静态的概念指taskManager所拥有的并发执行能力并行度是动态的概念指实际运行中的并发能力。因此并行度应当slot数一旦超出也只能等待。因此所有算子并行度中最大的那个就代表所需的slot数。