Flink槽口/并行性与最大CPU能力对比

2024-04-19 01:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

但我想这只是一个建议。举个例子,如果我有一个功能强大的内核(例如,最新的i7,最大的GHz),那就不同于拥有一个只有有限GHz的旧cpu。因此,运行比系统的cpu maxcores更多的插槽和并行性并不是不合理的。在

但是除了测试不同的配置之外,还有没有其他方法可以用flink检查我的系统的最大能力?在

我要说的是,我使用的是Flink的批处理Python API。在


Tags: 文档yaml官方系统逻辑cpu级别内核
2条回答

你的问题有几个有趣的地方。在

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

建议为每个插槽分配至少一个CPU核心,因为每个操作符至少由1个线程执行。考虑到你的运营商不执行阻塞呼叫,带宽足够高,可以不断地向运营商提供新的数据,每个CPU核心1个插槽应该可以让你的CPU保持忙碌。在

另一方面,如果您的操作员发出阻塞调用(例如,与外部数据库通信),那么有时可能需要配置比内核更多的插槽。在

相关问题 更多 >