[英]Is one TaskManager with three slots the same as three TaskManagers with one slot in Apache Flink
在 Flink 中,據我了解,如果需要,JobManager 可以將一個作業分配給具有多個槽的多個 TaskManager。 例如,一個作業可以分配三個 TaskManager,使用五個槽。
現在,假設我執行一個具有三個插槽的 TaskManager(TM),分配給 3G RAM 和一個 CPU。
這和執行三個TaskManager,共享一個CPU,每一個分配1G 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 state 后端,每台機器有一個 TM,有很多槽是有意義的。 這將最小化每個 TM 的開銷。 然而,每個 TM 的開銷並不那么重要。
另一方面,每個 TM 使用一個插槽運行提供了一些有用的隔離,並減少了垃圾收集的影響,這與基於堆的 state 后端特別相關。
對於容器化部署,通常建議每個 TM 一個插槽到 go,直到達到一定規模,此時您將希望通過為每個 TM 添加更多插槽而不是更多 TM 來擴展。 問題是檢查點協調器需要與每個 TM 協調(但不是與每個槽),並且隨着 TM 的數量達到數百或數千,這可能成為瓶頸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.