Flink中并行度和slot的关系——任务和任务槽

一、任务槽(task slots)

Flink的每一个TaskManager是一个JVM进程,在其上可以运行多个线程(任务task),那么每个线程可以拥有多少进程资源呢?任务槽就是这样一个概念,对taskManager上每个任务运行所占用的资源做出明确的划分,即每个任务槽就表示了TaskManager拥有计算资源的一个固定大小的子集。

二、任务槽数量的设置

一个slot独享taskManager意味着更高的隔离级别,任务彼此之间影响降低;多个slot则能共享TCP连接、心跳信息、数据集等, 减少了每个任务的运行开销,在降低隔离级别时提高了性能。

可以通过taskmanager.numberOfTaskSlots参数来设置slot数量,最好设置为Cpu核数,因为slot仅仅用来隔离内存,避免不同任务对cpu的竞争。

三、共享slot

对于不同任务节点的子任务,Flink允许它们共享slot。即每个任务节点的子任务一字排开,占据不同的slot, 不同任务节点的子任务可以共享slot

那么为什么要共享slot呢?引文不同任务节点所需资源是不同的,有些是资源密集型,有些是资源非密集型。设想这样一种情况:在不共享时,有三个任务节点:source/map(这里由于并行度一致,所以合并算子链了)、widdow、sink,其中window是资源密集型的,那么当大量数据到来时,source/map和sink都可以很快完成,但window任务耗时很久,于是下游的sink任务所占据的slot就会因为等待而闲置,而上游的source/map任务也会因为数据积压而产生背压,从而资源开始等待,这样资源的利用效率就会大大降低。

解决这一问题的思路就是共享slot,在一个slot上同时存在资源密集型和非密集型任务,它们自由分配对资源的占用比例(即将资源密集型任务平均分配到每一个slot)从而提升资源利用率。

默认情况下,由于同一任务节点的并行子任务不能共享slot,所以**slot的数量就取决于所有算子并行度的最大值。**当然,也可以通过slotSharingGroup手动指定共享slot。

四、并行度和slot的关系

slot是静态的概念,指taskManager所拥有的并发执行能力;并行度是动态的概念,指实际运行中的并发能力。因此,并行度应当<=slot数,一旦超出也只能等待。因此,所有算子并行度中最大的那个就代表所需的slot数。

相关推荐
Georgeviewer3 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
腻害兔4 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
GIR1235 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
南讯股份Nascent6 小时前
洽洽全域会员项目启动会圆满召开
大数据·人工智能
大郭鹏宇6 小时前
基于 LangGraph 构建智能分诊系统(一):项目概述与环境搭建
大数据·人工智能·microsoft·langchain
天天爱吃肉821810 小时前
【电源拆解:跟着问答逐一认识开关适配器PCB元器件】
大数据·人工智能·python·功能测试·嵌入式硬件·汽车
Elastic 中国社区官方博客10 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
abcy07121310 小时前
storm核心实时机制
大数据·storm
灵机一物11 小时前
合伙制律所分红和提成律师个税怎么合规优化?
大数据·人工智能
REST_302712 小时前
告别Excel孤岛:一款任务链路可视化工具带来的真实改变
大数据·微服务·云计算·编辑器·excel·动态规划