根据我的理解,在Flink中,如有必要,JobManager可以将作业分配给具有多个插槽的多个TaskManager。例如,可以使用五个插槽为一个作业分配三个任务管理器。
现在,说我执行一个带有三个插槽的TaskManager(TM),这三个插槽分配给3G RAM和一个CPU。
这与执行三个TaskManager,共享一个CPU,并将它们各自分配给1 G RAM完全相同吗?
case 1
---------------
| 3G RAM |
| one CPU |
| three slots |
| TM |
---------------
case 2
--------------------------------------------|
| one CPU |
| ------------ ------------ ------------ |
| | 1G RAM | | 1G RAM | | 1G RAM | |
| | one slot | | one slot | | one slot | |
| | TM | | TM | | TM | |
| ------------ ------------ ------------ |
--------------------------------------------|
在性能和操作上存在着双向差异。
当在非容器化环境中运行时,通过RocksDB状态后端,在每台计算机上使用一个具有多个插槽的TM是有意义的。这将使每TM的开销最小化。但是,每个TM的开销并不是那么大。
另一方面,为每个TM运行一个插槽可提供一些有用的隔离,并减少垃圾收集的影响,这与基于堆的状态后端特别相关。
对于容器化部署,通常建议为每个TM分配一个插槽,直到达到一定的规模为止,此时,您将希望通过为每个TM添加更多的插槽而不是更多的TM进行扩展。问题是检查点协调器需要与每个TM(而不是每个插槽)协调,并且随着TM数量成百上千,这可能成为瓶颈。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句