当前的flink资源分配问题。我一个任务3个算子,算子A并行度为1,算子B并行度为10,算子C并行度15。集群5台机器。我怎么保证算子B和C在5台机器完全均衡呢?我不介意算子A在哪,但算子B和C必须完全均衡到5个机器。
算子更多了就更复杂了,部分算子的并行度不是5的倍数,会导致越来越多的类似B和C这些算子在5台机器的不均衡。 |
Flink 现阶段并不支持你说的这种针对特定算子的负载均衡。如果采用默认的 slot sharing 策略,是可以通过调整每台机器上的 tm 和
slot 个数来控制 cluster 总共只有 15 个 slot,这样可以保证 C 在 5 台机器上是均衡的。但是 B 目前是没有比较好的方法保证的。 Thank you~ Xintong Song On Mon, Sep 21, 2020 at 5:45 PM 赵一旦 <[hidden email]> wrote: > > 当前的flink资源分配问题。我一个任务3个算子,算子A并行度为1,算子B并行度为10,算子C并行度15。集群5台机器。我怎么保证算子B和C在5台机器完全均衡呢?我不介意算子A在哪,但算子B和C必须完全均衡到5个机器。 > > > 算子更多了就更复杂了,部分算子的并行度不是5的倍数,会导致越来越多的类似B和C这些算子在5台机器的不均衡。 > |
我觉得这个非常必要需要解决,后续可以提升下。
我相信假设生产中flink集群如果是5台机器,不管slot是多少,对于任务来说,复杂算子的并行度自然会设置为5的倍数,非5倍数的一般可能是不可并行的算子(比如一些数据量极少的配置流等)。这些非5倍数的算子影响到5倍数算子的均衡分配会很麻烦。 目前使用1.10的cluster.evenly-spread-out-slots: true可以保证如果算子都是5的倍数,所有算子都会均衡到5机器。但是不可避免会有部分非5倍数的算子,进而影响到复杂算子的均衡。 Xintong Song <[hidden email]> 于2020年9月22日周二 上午10:21写道: > Flink 现阶段并不支持你说的这种针对特定算子的负载均衡。如果采用默认的 slot sharing 策略,是可以通过调整每台机器上的 tm 和 > slot 个数来控制 cluster 总共只有 15 个 slot,这样可以保证 C 在 5 台机器上是均衡的。但是 B > 目前是没有比较好的方法保证的。 > > Thank you~ > > Xintong Song > > > > On Mon, Sep 21, 2020 at 5:45 PM 赵一旦 <[hidden email]> wrote: > > > > > > 当前的flink资源分配问题。我一个任务3个算子,算子A并行度为1,算子B并行度为10,算子C并行度15。集群5台机器。我怎么保证算子B和C在5台机器完全均衡呢?我不介意算子A在哪,但算子B和C必须完全均衡到5个机器。 > > > > > > 算子更多了就更复杂了,部分算子的并行度不是5的倍数,会导致越来越多的类似B和C这些算子在5台机器的不均衡。 > > > |
本身我的任务复杂点,CPU IDLE 正常在 80 - 90 %,每五分钟窗口闭合时刻CPU IDLE会降到 20-30
%。如果运气不好,任务再不均衡点,部分机器会存在短时间卡死状态,长久下去很容器导致flink进程失败。 赵一旦 <[hidden email]> 于2020年9月22日周二 下午1:09写道: > 我觉得这个非常必要需要解决,后续可以提升下。 > > 我相信假设生产中flink集群如果是5台机器,不管slot是多少,对于任务来说,复杂算子的并行度自然会设置为5的倍数,非5倍数的一般可能是不可并行的算子(比如一些数据量极少的配置流等)。这些非5倍数的算子影响到5倍数算子的均衡分配会很麻烦。 > 目前使用1.10的cluster.evenly-spread-out-slots: > true可以保证如果算子都是5的倍数,所有算子都会均衡到5机器。但是不可避免会有部分非5倍数的算子,进而影响到复杂算子的均衡。 > > Xintong Song <[hidden email]> 于2020年9月22日周二 上午10:21写道: > >> Flink 现阶段并不支持你说的这种针对特定算子的负载均衡。如果采用默认的 slot sharing 策略,是可以通过调整每台机器上的 tm 和 >> slot 个数来控制 cluster 总共只有 15 个 slot,这样可以保证 C 在 5 台机器上是均衡的。但是 B >> 目前是没有比较好的方法保证的。 >> >> Thank you~ >> >> Xintong Song >> >> >> >> On Mon, Sep 21, 2020 at 5:45 PM 赵一旦 <[hidden email]> wrote: >> >> > >> > >> 当前的flink资源分配问题。我一个任务3个算子,算子A并行度为1,算子B并行度为10,算子C并行度15。集群5台机器。我怎么保证算子B和C在5台机器完全均衡呢?我不介意算子A在哪,但算子B和C必须完全均衡到5个机器。 >> > >> > >> > 算子更多了就更复杂了,部分算子的并行度不是5的倍数,会导致越来越多的类似B和C这些算子在5台机器的不均衡。 >> > >> > |
你的这个需求我是非常同意的。事实上,不管是在社区的邮件列表还是在我们的生产实践中,也都不是第一次遇到这样的需求了。
这个需求实现起来还是有一定难度的,这主要是由 Flink 目前的调度模型决定的。Flink 资源调度拆解为两层,ResourceManager 决定集群资源如何分配给作业,JobMaster 决定作业资源如何被 Task 使用。这就造成了 RM 不知道分配出去的 slot 到底是哪个算子在用,JM 不知道拿到的 slot 来自哪台机器。 针对你说的这个问题,我们也进行过一些讨论,目前来看还是需要先对 Flink 当前的调度模型做一些调整,前置任务比较多,短时间内可能还难以解决。相关前置任务有些已经在进行中或已完成(如 FLIP-119/FLIP-138/FLINK-18689 等),有些则还在设计讨论阶段。 Thank you~ Xintong Song On Tue, Sep 22, 2020 at 1:17 PM 赵一旦 <[hidden email]> wrote: > 本身我的任务复杂点,CPU IDLE 正常在 80 - 90 %,每五分钟窗口闭合时刻CPU IDLE会降到 20-30 > %。如果运气不好,任务再不均衡点,部分机器会存在短时间卡死状态,长久下去很容器导致flink进程失败。 > > 赵一旦 <[hidden email]> 于2020年9月22日周二 下午1:09写道: > > > 我觉得这个非常必要需要解决,后续可以提升下。 > > > > > 我相信假设生产中flink集群如果是5台机器,不管slot是多少,对于任务来说,复杂算子的并行度自然会设置为5的倍数,非5倍数的一般可能是不可并行的算子(比如一些数据量极少的配置流等)。这些非5倍数的算子影响到5倍数算子的均衡分配会很麻烦。 > > 目前使用1.10的cluster.evenly-spread-out-slots: > > true可以保证如果算子都是5的倍数,所有算子都会均衡到5机器。但是不可避免会有部分非5倍数的算子,进而影响到复杂算子的均衡。 > > > > Xintong Song <[hidden email]> 于2020年9月22日周二 上午10:21写道: > > > >> Flink 现阶段并不支持你说的这种针对特定算子的负载均衡。如果采用默认的 slot sharing 策略,是可以通过调整每台机器上的 tm 和 > >> slot 个数来控制 cluster 总共只有 15 个 slot,这样可以保证 C 在 5 台机器上是均衡的。但是 B > >> 目前是没有比较好的方法保证的。 > >> > >> Thank you~ > >> > >> Xintong Song > >> > >> > >> > >> On Mon, Sep 21, 2020 at 5:45 PM 赵一旦 <[hidden email]> wrote: > >> > >> > > >> > > >> > 当前的flink资源分配问题。我一个任务3个算子,算子A并行度为1,算子B并行度为10,算子C并行度15。集群5台机器。我怎么保证算子B和C在5台机器完全均衡呢?我不介意算子A在哪,但算子B和C必须完全均衡到5个机器。 > >> > > >> > > >> > 算子更多了就更复杂了,部分算子的并行度不是5的倍数,会导致越来越多的类似B和C这些算子在5台机器的不均衡。 > >> > > >> > > > |
Free forum by Nabble | Edit this page |