并行处理—一个具有三个插槽的taskmanager是否与apache flink中具有一个插槽的三个taskmanager相同

mtb9vblg  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(402)

在flink中,据我所知,jobmanager可以在必要时将一个作业分配给具有多个槽的多个taskmanager。例如,一个作业可以分配给三个TaskManager,使用五个槽。
现在,假设我执行一个带有三个插槽的taskmanager(tm),分配给3gram和一个cpu。
这是否完全等同于执行三个TaskManager,共享一个cpu,并且每个都分配给1GRAM?

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       |  |
|  ------------  ------------ ------------  |
--------------------------------------------|
klh5stk1

klh5stk11#

性能和操作上的差异是双向的。
当在非容器化环境中运行时,使用rocksdb state后端,每台机器有一个tm和许多插槽是有意义的。这将最小化每tm开销。然而,每tm开销并没有那么大。
另一方面,每个tm运行一个插槽提供了一些有用的隔离,并减少了垃圾收集的影响,这与基于堆的状态后端特别相关。
对于集装箱化部署,通常建议每个tm使用一个插槽,直到达到某个显著的规模,此时您将希望通过每个tm添加更多插槽而不是更多的tm来扩展。问题是,检查点协调器需要与每个tm协调(而不是与每个插槽协调),并且随着tm的数量达到数百或数千,这可能成为一个瓶颈。

相关问题