Flink源码学习笔记(5) SlotSharing实现

本文深入探讨Flink 1.9.2的SlotSharing实现,通过树形结构描述如何复用Slot,提高集群资源利用率。讲解了CoLocationGroup、SlotSharingGroup等概念,以及它们在任务调度中的作用,最后提出针对低版本Flink资源分配不均的问题进行优化的思考。
摘要由CSDN通过智能技术生成

封面图片不要使用微信打开文章,可以使用手机/电脑浏览器

这篇文章主要是想介绍在deploy到Taskmanager前,Slotsharing机制是如何将不同TaskSubtask复用同一个Slot,更加充分地利用Flink集群资源。学习的Flink代码版本是1.9.2。

相关概念

  1. SlotSharingGroup: 将不同的的Task放在相同的Slot的分组,默认是default,只有一个分组,也就是Flink会尽量将不同Task的Subtask放在到一个Slot里面。

  2. CoLocationGroup: 不同Task的相同Subtask放在相同Slot的约束。如 process0 和sink0,process1和sink1分别放在一起。

    可以通过Flink API 中的Transformation 方法设置

    public abstract class Transformation<T> {
         
      public void setSlotSharingGroup(String slotSharingGroup) {
         
    		this.slotSharingGroup = slotSharingGroup;
    	}
      public void setCoLocationGroupKey(@Nullable String coLocationGroupKey) {
         
    		this.coLocationGroupKey = coLocationGroupKey;
    	}
    }
    

实现

1.相关类:

  • SlotSharingManager : 负责SlotSharing的关键类,同一个作业相同SlotSharingGroupExecution申请资源会共用同一个SlotSharingManagerSlotSharingManager 维护多棵TaskSlot树,其中TaskSlot并不是真实TaskManager中的Slot,只是用来描述多个Task复用Slot的抽象实现。后面会详细说一下。
  //尚未占用到真实Slot的TaskSlot树的根节点
	private final Map<SlotRequestId, MultiTaskSlot> unresolvedRootSlots;
	//已占用到真实Slot的TaskSlot树的根节点
	private final Map<TaskManagerLocation, Map<AllocationID, MultiTaskSlot>> resolvedRootSlots;
  • TaskSlot: 节点实现类, 上文提到的树节点,共有两个实现类

    image-20220314175549868

    • MultiTaskSlot:一般是树的根节点,还有可能是中间节点(设置了CoLocationGroup),是PhyscialSlot.PayLoad接口的实现类,如果是根节点,会占用一个PhysicalSlot,这棵叶子节点会共享根节点的PhysicalSlot

          //子节点
          private final Map<AbstractID, TaskSlot> children;
      		// 父节点
      		@Nullable
      		private final MultiTaskSlot parent;
      		// 被分配的Slot,如果被分配完成(future是完成状态),那么这个根节点就会被标记成resolved
      		private final CompletableFuture<? extends SlotContext></
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值