Flink Slots / Parallelism vs Max CPU功能

时间:2017-05-14 23:05:25

标签: python parallel-processing apache-flink

我试图理解.yaml文档中flink的插槽和并行配置背后的逻辑。

官方Flink文档声明,对于cpu中的每个核心,您必须分配1个插槽并同时将并行级别提高一个。

但我认为这只是一个建议。例如,如果我有一个强大的核心(例如最新的i7和最高GHz),它与拥有有限GHz的旧cpu不同。因此,运行比我系统的cpu maxcores更多的插槽和并行性并不合理。

但除了测试不同的配置之外还有其他方法,用flink检查我的系统的最大功能吗?

仅供记录,我正在使用Flink的Batch Python API。

2 个答案:

答案 0 :(得分:3)

建议为每个插槽分配至少一个CPU内核,因为每个操作符至少由一个线程执行。鉴于您没有在运营商中执行阻塞呼叫,并且带宽足够高,可以不断向运营商提供新数据,每CPU核心1个插槽应该可以让CPU保持忙碌状态。

另一方面,如果您的运营商发出阻止呼叫(例如与外部数据库通信),有时可能配置比您拥有核心更多的插槽。

答案 1 :(得分:2)

你的问题中有几点有趣。

  • 首先,Flink中的插槽是每个任务管理器为集群带来的处理能力,它们首先限制可以在其上执行的应用程序的数量,以及同时可执行运算符的数量。暂时地,计算机不应该提供比其中存在的CPU单元更多的处理能力。当然,如果在其上运行的所有任务在CPU和低IO操作中都是计算密集型的,那么情况就是如此。如果你的应用程序中的操作员被IO操作高度阻塞,那么在配置比任务管理器中可用的CPU内核更多的插槽时没有问题,正如@Till_Rohrmann所说。
  • 另一方面,默认并行性是Flink集群中应用程序可用的CPU核心数,尽管在运行应用程序或在代码中指定时,可以手动将其指定为参数。请注意,Flink集群可以同时运行多个应用程序,并且只有一个块整个集群是不方便的,除非它是目标,因此,默认并行度通常小于集群中可用的插槽数(总和)由任务管理员提供的插槽)。
  • 然而,具有并行性的应用程序4暂时意味着,如果它包含一个流:input()。Map()。Reduce()。Sink()每个运算符应该有4个实例,所以,总和应用程序使用的核心大于4.但是,这是Flink的开发人员应该解释的内容;)