有没有办法确定总作业并行度或运行 Flink 作业所需的插槽数量(在运行之前)

STh*_*mas 5 apache-flink flink-streaming flink-cep flink-sql

有没有一种方法可以确定从执行计划或其他方式运行作业所需的任务槽总数,而不必先实际启动作业。

根据此文档:https ://ci.apache.org/projects/flink/flink-docs-stable/concepts/runtime.html

“Flink 集群需要的任务槽数量与作业中使用的最高并行度完全相同。无需计算程序总共包含多少个任务(具有不同的并行度)。”

如果我从 StreamExecutionEnvironment 获取执行计划(设置后但没有实际执行作业)并从执行计划 json 中的节点列表中获取任何节点的最大并行度,这是否足以确定执行任务所需的任务槽数运行作业。

是否存在这种情况不再出现的情况?或者有什么注意事项需要牢记吗?

Til*_*ann 3

在一般情况下,可以通过以下方式计算给定 Flink 作业所需的槽数:对于每个槽共享组 g(表示可以部署到同一槽中的一组算子),需要找到以下算子:最大并行度p_max_g。现在需要将作业中每个槽共享组的这些数字相加slots = sum_(g in G) p_max_g,以获得所需的槽数。

大多数情况下(如果用户没有设置任何槽位共享组),则应该只存在一个槽位共享组G = {g}。这意味着 Flink 可以将每个算子的一个子任务部署到同一个槽中。

一种特殊情况是批处理作业(有界流),如果它们使用阻塞数据交换。在这种情况下,可以依次运行不同的时隙共享组(假设它们与阻塞数据交换/操作符边缘对齐)。

不幸的是,ExecutionEnvironment.getExecutionPlan不打印操作员的插槽共享组。因此,仅当存在单个槽共享组时,基于字符串化执行计划计算所需槽数才有效。