Flink目前的Slot分配策略存在的问题

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Flink目前的Slot分配策略存在的问题

徐涛
Hi All,
    现在申请Slot的流程是
    SlotPool -> ResourceManager -> TaskManager -> SlotPool
    在ResourceManager中具体选择哪个Slot做分配是根据SlotManager.findMatchingSlot来的,在其中是遍历freeSlots这个LinkedHashMap,如果发现可用,则使用这个Slot。
问题在于freeSlots中的slot一般是在每个TaskManager向ResourceManager注册的时候生成的。里面的内容可能是:
Slot1-1, Slot1-2, Slot1-3, Slot1-4, Slot2-1, Slot2-2, Slot2-3, Slot2-4, Slot3-1, Slot3-2, Slot3-3, Slot3-4
那么在分配Slot的时候,就会发生这样的现象,先将一个TaskManager上的Slot全部占用以后,再去把下一个TaskManager上的所有Slot占用。Slot没有在多个TaskManager之间均匀分配。
    请问下:
    1. 这样会导致某个TM上全部运行某个Job的SubTask。 这样在分布式程序的分布性上面,没有分布在多台机器上,而是分布在了少数的几台机器上。
    2. Flink是故意这样设计的吗?是什么原因导致这样的设计方案?


谢谢
徐涛
Reply | Threaded
Open this post in threaded view
|

Re: Flink目前的Slot分配策略存在的问题

zhisheng
hi,社区已经发现了这个问题,之前也看到有同学有这样的疑问。

社区会在后续版本中修复,目前规划的是在1.7.3, 1.8.2, 1.9.0几个版本中修复。详情可以参考:
https://issues.apache.org/jira/browse/FLINK-12122

徐涛 <[hidden email]> 于 2019年7月21日周日 上午10:39写道:

> Hi All,
>     现在申请Slot的流程是
>     SlotPool -> ResourceManager -> TaskManager -> SlotPool
>
> 在ResourceManager中具体选择哪个Slot做分配是根据SlotManager.findMatchingSlot来的,在其中是遍历freeSlots这个LinkedHashMap,如果发现可用,则使用这个Slot。
> 问题在于freeSlots中的slot一般是在每个TaskManager向ResourceManager注册的时候生成的。里面的内容可能是:
> Slot1-1, Slot1-2, Slot1-3, Slot1-4, Slot2-1, Slot2-2, Slot2-3, Slot2-4,
> Slot3-1, Slot3-2, Slot3-3, Slot3-4
>
> 那么在分配Slot的时候,就会发生这样的现象,先将一个TaskManager上的Slot全部占用以后,再去把下一个TaskManager上的所有Slot占用。Slot没有在多个TaskManager之间均匀分配。
>     请问下:
>     1. 这样会导致某个TM上全部运行某个Job的SubTask。
> 这样在分布式程序的分布性上面,没有分布在多台机器上,而是分布在了少数的几台机器上。
>     2. Flink是故意这样设计的吗?是什么原因导致这样的设计方案?
>
>
> 谢谢
> 徐涛