flink之startNewChain、disableChaining、slotSharingGroup

一、基本概念

图1

图二 

1.task:一个task可以看成是一条完整的算子连(source -> sink),在默认情况下,且线程够用的情况下,一个task运行在一个slot里面;
2.subtask:task的组成单位,一个subtask由一个线程来运行;
3.operator chain:subtask中的算子连成链;
4.形成subtask的规则:①当数据发生重定向时例如KeyBy操作。②当程序算子并行度发生变化时。③通过算子手动切分Operator(disableOperatorChaining,startNewChain,disableChaining)
5.slot:隔绝内存,不隔绝cpu意味着一个slot可以有多个线程,所以,一个slot里面可以运行多个subtask,这是一种优化,相同资源组在同一个slot;
6.disableOperatorChaining:默认为开启,通过 env.disableOperatorChaining() 禁用;
7.startNewChain: 从当前算子之前开始划分一条新的Operator chain,在算子之后调用;
8.disableChaining: 针对某一个算子操作,断开算子前后的Operator chain,使算子单独作为一个subtask。
9. 共享资源槽【slotSharingGroup("name")】:相同资源组的subtask在一个slot执行,见图2,如果算子调用之后,从这个算子开始,接下来的算子在一个组内(slot内);

二、结合实际例子分析(主要是slotSharingGroup,其他startNewChain,disableChaining很好理解,网上也有很多列子,这里就不再赘述)

资源设置:taskmanager 3 slot 2

图三

图四

 图五

情况一:图三和图四对比,可以看出没有什么变化,因为souce和map并行度的改变他们并不属于一个subtask,所以map之后加不加disableChaining没有什么区别;

情况二:图三和图五对比,flilter操作单独运行在一个slot,所以slotSharingGroup,可以使从调用它的算子开始,接下来的算子,共享一个资源组(当然也可以分开operator chain);

情况三:当资源设置改为taskmanager为3,slot为1的时候运行图三,理论上只有3个slot,但是flink还是会申请4个slot,有一个taskmannager的slot数为2;

情况四:当资源设置依然为情况三,但是map的并行度设置为100,这个时候flink向yarn申请资源但是资源不够,最终崩掉了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听箫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值