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