复杂Flink任务Task均衡调度和优化措施

5f3c936ee902553ab5aa9db08d2f142f.png300万字!全网最全大数据学习面试社区等你来!

一、背景:

flink任务部署使用基于k8s的standalone集群,先在容器上部署flink集群再提交flink任务,其中flink任务的提交与taskmanager的创建、注册是同时进行的。

二、问题

如果集群有35个taskmanager,140个slot,其中一个Vertex的并行度<140,属于该vertex的task在taskmanager上分布不均,导致节点负载不均衡。

如下所示:

  • 该flink拓扑拥有5个vertex,其中两个vertex并行度为140,其他三个并行度根据kafka分区数设置为:10、30、35。任务最大并行度为140,任务资源配置为:35个【4core 8gb】的taskManager节点

9e2ff1e7a5246c4088701627a31be460.jpeg
  • 通过web ui可发现,即使配置了cluster.evenly-spread-out-slots:true,另外三个vertex的task依然会被调度到同个taskmanager上

e4f65dd95d4e4106509ab7473ac12821.png 04123cab6e5fbc3d6544c59fab29c703.png

三、优化方式

1. 问题分析

上诉问题可以简化为:

假设一个任务拓扑逻辑为:Vertex A(p=2)->Vertex B(p=4)->Vertex C(p=2)。基于slot共享和本地数据传输优先的划分策略,划分为四个ExecutionSlotSharingGroup:{A1,B1,C1}、{A2,B2,C2}、{B3}、{B4},

如果资源配置将每个Taskmanager划分为2个Slot,就可能出现以下分配:

b7f5ec45071d5f962835e88c8d4662f9.png

当前Slot划分是平均划分内存,对cpu没有做限制。上诉分配会导致节点负载不均衡,若A、C Task计算资源耗费较多,TaskManager1将会成为计算的瓶颈,理想情况下我们希望分配方式是:

ba933ee908e25384caef626220e89e29.png

2. 优化

修改策略

1. 为ExecutionSlotSharingGroup申请slot时先对其按包含Task个数排序,优先调度Task个数多的分组

2. 延缓任务调度,等注册TaskManager个数足够大ExecutionSlotSharingGroup平均分配再为其申请Slot

效果

优化后task调度情况:同个vertex的多个task均匀调度到不同的taskmanager节点上

08182aeeb1520a03d244d9bd4ed49001.png 4a286711ae2c01207593428e3c582033.png

四、性能对比

1. CPU负载对比

  • 优化前: 节点间CPU负载较为分散,部分节点长时间处于100%高负载状态

64fc185f67cb91b07b70aabc55ef7c9d.png
  • 优化后: 节点间CPU负载较为集中,节点不会长时间处于100%负载状态

fc14048ee74ad6fa7edc64425fea059d.png

再补充个CPU使用率对比

从拓扑图可知任务存在200/480两种不同并行度的task,通过均衡task sharegroup,实现各tm节点的cpu负载均衡,以便我们后续压缩tm的资源配额。

558e7ec70dfedbf98cf0667725a04306.png d2e342c72d56d1b5fd00b58948fc4824.png

2. 数据积压情况

优化后数据积压量比之前少一半,同资源情况下处理能力更佳,数据延迟更低。

  • 优化前:

775103a098adcb0a2746b25d9f09d88b.png
  • 优化后:

2e3622cd92de26ea87c03d68898bd397.png

六、思考

1. Task均衡

对于拓扑:Vertex A(p=3)->Vertex B(p=4)->Vertex C(p=1)。

将会按以下分配:

b320c8a6ef7dff6893416d9f8fd6401e.png Vertex B->Vertex C存在四条数据传输通道(B1->C1)、(B2->C1)、(B3->C1)、(B4->C1),对于非forward的连接,无论subtask分配到哪个group中,至少都存在三条通道需要跨节点通讯。

那么如果在分组的时候就先对task做一次均衡:{A1,B1}、{A3,B3}、{A2,B2}、{B4,C1},后面无论怎么调度都会均衡。但当task num% slot num != 0的时候,仍存在task在单tm聚集的情况。

2. 延迟调度的改进

在flink生成执行计划时期根据拓扑逻辑生成延迟的策略,减少用户操作感知。

如果这个文章对你有帮助,不要忘记 「在看」 「点赞」 「收藏」 三连啊喂!

5bd4952fbce4fa1e5ba5fafc6052938e.png

390abf1216f36f7175cefebdaed6f19d.jpeg

2022年全网首发|大数据专家级技能模型与学习指南(胜天半子篇)

互联网最坏的时代可能真的来了

我在B站读大学,大数据专业

我们在学习Flink的时候,到底在学习什么?

193篇文章暴揍Flink,这个合集你需要关注一下

Flink生产环境TOP难题与优化,阿里巴巴藏经阁YYDS

Flink CDC我吃定了耶稣也留不住他!| Flink CDC线上问题小盘点

我们在学习Spark的时候,到底在学习什么?

在所有Spark模块中,我愿称SparkSQL为最强!

硬刚Hive | 4万字基础调优面试小总结

数据治理方法论和实践小百科全书

标签体系下的用户画像建设小指南

4万字长文 | ClickHouse基础&实践&调优全视角解析

【面试&个人成长】2021年过半,社招和校招的经验之谈

大数据方向另一个十年开启 |《硬刚系列》第一版完结

我写过的关于成长/面试/职场进阶的文章

当我们在学习Hive的时候在学习什么?「硬刚Hive续集」

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值