如何确定flink中的任务槽数

oxalkeyp  于 2022-12-09  发布在  Apache
关注(0)|答案(2)|浏览(198)

我正在尝试确定如何为flink作业划分任务插槽。更具体地说,是否有理由为每个任务管理器使用2个(或更多)任务插槽,而不是每个任务管理器使用一个任务插槽?我了解到每个任务管理器使用多个任务插槽有助于减少网络开销,但是否还有其他好处?
此外,我想知道“备用”任务插槽是否有好处(即,将并行度设置为小于可用任务插槽数的值)?
谢谢你:)

mlmc2os5

mlmc2os51#

另一个要考虑的因素是:具有多个槽的TM将使所有这些槽在同一JVM中运行。因此,如果您使用基于堆的状态后端,则所有这些槽的所有对象将由同一垃圾收集器处理--这将导致更长时间的GC暂停当Flink支持更现代的垃圾收集器时,这个问题就不那么重要了,而且RocksDB也没有问题。

rhfm7lfc

rhfm7lfc2#

  • Better resource utilisation : Task manager with n slots means task-manager will dedicate 1/n of its memory to each slot. It means more subtasks share the same JVM and share TCP connections (via multiplexing) and heartbeat messages. They may also share data sets and data structures, thus reducing the per-task overhead. Also, a good default number of task slots would be the number of CPU cores.

没有定义的配置。它完全取决于应用程序和用例。
每个任务管理器1个插槽的配置提供了隔离,并且更易于管理。但这可能会留下一些未使用的内存。另一方面,如果运行多个插槽和多个管道/作业,diff作业的任务可能会在1个任务管理器上调度。由于特定作业的内存消耗很高,如果任务管理器关闭,它将重新启动在其上运行的所有作业。如果每个群集只运行一个作业,则每个TM运行多个插槽可能是合适的。
当任何任务管理器关闭或管道重新启动时,备用任务插槽都很有用。在这些情况下,作业管理器会将这些任务分配给这些备用插槽,应用程序将经历更少的停机时间。

相关问题