You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by 赵一旦 <hi...@gmail.com> on 2020/09/21 09:44:38 UTC

资源均衡问题

当前的flink资源分配问题。我一个任务3个算子,算子A并行度为1,算子B并行度为10,算子C并行度15。集群5台机器。我怎么保证算子B和C在5台机器完全均衡呢?我不介意算子A在哪,但算子B和C必须完全均衡到5个机器。


算子更多了就更复杂了,部分算子的并行度不是5的倍数,会导致越来越多的类似B和C这些算子在5台机器的不均衡。

Re: 资源均衡问题

Posted by Xintong Song <to...@gmail.com>.
你的这个需求我是非常同意的。事实上,不管是在社区的邮件列表还是在我们的生产实践中,也都不是第一次遇到这样的需求了。


这个需求实现起来还是有一定难度的,这主要是由 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 赵一旦 <hi...@gmail.com> wrote:

> 本身我的任务复杂点,CPU IDLE 正常在 80 - 90 %,每五分钟窗口闭合时刻CPU IDLE会降到 20-30
> %。如果运气不好,任务再不均衡点,部分机器会存在短时间卡死状态,长久下去很容器导致flink进程失败。
>
> 赵一旦 <hi...@gmail.com> 于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 <to...@gmail.com> 于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 赵一旦 <hi...@gmail.com> wrote:
> >>
> >> >
> >> >
> >>
> 当前的flink资源分配问题。我一个任务3个算子,算子A并行度为1,算子B并行度为10,算子C并行度15。集群5台机器。我怎么保证算子B和C在5台机器完全均衡呢?我不介意算子A在哪,但算子B和C必须完全均衡到5个机器。
> >> >
> >> >
> >> > 算子更多了就更复杂了,部分算子的并行度不是5的倍数,会导致越来越多的类似B和C这些算子在5台机器的不均衡。
> >> >
> >>
> >
>

Re: 资源均衡问题

Posted by 赵一旦 <hi...@gmail.com>.
本身我的任务复杂点,CPU IDLE 正常在 80 - 90 %,每五分钟窗口闭合时刻CPU IDLE会降到 20-30
%。如果运气不好,任务再不均衡点,部分机器会存在短时间卡死状态,长久下去很容器导致flink进程失败。

赵一旦 <hi...@gmail.com> 于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 <to...@gmail.com> 于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 赵一旦 <hi...@gmail.com> wrote:
>>
>> >
>> >
>> 当前的flink资源分配问题。我一个任务3个算子,算子A并行度为1,算子B并行度为10,算子C并行度15。集群5台机器。我怎么保证算子B和C在5台机器完全均衡呢?我不介意算子A在哪,但算子B和C必须完全均衡到5个机器。
>> >
>> >
>> > 算子更多了就更复杂了,部分算子的并行度不是5的倍数,会导致越来越多的类似B和C这些算子在5台机器的不均衡。
>> >
>>
>

Re: 资源均衡问题

Posted by 赵一旦 <hi...@gmail.com>.
我觉得这个非常必要需要解决,后续可以提升下。
我相信假设生产中flink集群如果是5台机器,不管slot是多少,对于任务来说,复杂算子的并行度自然会设置为5的倍数,非5倍数的一般可能是不可并行的算子(比如一些数据量极少的配置流等)。这些非5倍数的算子影响到5倍数算子的均衡分配会很麻烦。
目前使用1.10的cluster.evenly-spread-out-slots:
true可以保证如果算子都是5的倍数,所有算子都会均衡到5机器。但是不可避免会有部分非5倍数的算子,进而影响到复杂算子的均衡。

Xintong Song <to...@gmail.com> 于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 赵一旦 <hi...@gmail.com> wrote:
>
> >
> >
> 当前的flink资源分配问题。我一个任务3个算子,算子A并行度为1,算子B并行度为10,算子C并行度15。集群5台机器。我怎么保证算子B和C在5台机器完全均衡呢?我不介意算子A在哪,但算子B和C必须完全均衡到5个机器。
> >
> >
> > 算子更多了就更复杂了,部分算子的并行度不是5的倍数,会导致越来越多的类似B和C这些算子在5台机器的不均衡。
> >
>

Re: 资源均衡问题

Posted by Xintong Song <to...@gmail.com>.
Flink 现阶段并不支持你说的这种针对特定算子的负载均衡。如果采用默认的 slot sharing 策略,是可以通过调整每台机器上的 tm 和
slot 个数来控制 cluster 总共只有 15 个 slot,这样可以保证 C 在 5 台机器上是均衡的。但是 B 目前是没有比较好的方法保证的。

Thank you~

Xintong Song



On Mon, Sep 21, 2020 at 5:45 PM 赵一旦 <hi...@gmail.com> wrote:

>
> 当前的flink资源分配问题。我一个任务3个算子,算子A并行度为1,算子B并行度为10,算子C并行度15。集群5台机器。我怎么保证算子B和C在5台机器完全均衡呢?我不介意算子A在哪,但算子B和C必须完全均衡到5个机器。
>
>
> 算子更多了就更复杂了,部分算子的并行度不是5的倍数,会导致越来越多的类似B和C这些算子在5台机器的不均衡。
>