Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

datax集成弹性资源组件 #2181

Open
leehom opened this issue Aug 10, 2024 · 0 comments
Open

datax集成弹性资源组件 #2181

leehom opened this issue Aug 10, 2024 · 0 comments

Comments

@leehom
Copy link

leehom commented Aug 10, 2024

1 简介
弹性组件集成有弹性需求的组件,为组件增加高弹性容量,规划集成datax,elastic-job,xxl-job,sentinel dashboard,dolphinscheduer,eventbridge
datax datax基于社区版,此前已对datax进行重构,增加其metrics exporter,分布式特性,分布式模型是基于启动的worker分配,固定的worker数量,如果分片少,浪费资源;分片多,资源不足,只有排队等待
弹性资源组件基于k8s的资源管理能力,动态申请资源,资源管理使用flink的声明式管理,集成组件声明需要资源数量,弹性资源组件的资源管理器先分片可用资源,若不足,计算并申请新的worker,worker启动注册资源,可用资源增加,资源管理器继续分配
本文介绍弹性资源组件的集成架构设计,datax接入设计,使用弹性资源申请资源,部署datx engine
2 关键词

3 参考资料
https://blog.csdn.net/szlhj/category_12446958.html 弹性资源设计/flink集群与资源原理分析
4 弹性资源
本节简单介绍弹性资源组件

image

上图是弹性资源组件的技术架构图,其中作业管理器接入系统提供,需实现与资源管理器和任务管理器的交互,交互使用rpc机制。
总体架构是master-worker,master的高可用是k8s的复制机制提供,选主机制k8s提供,作业管理器和资源管理器参与选主,作业管理器/任务管理器接入资源管理器主节点监听,获取最新资源管理器;作业管理器接入作业管理器主节点监听,获取最新的作业管理器主节点
数据架构,资源是组件的核心数据,分两条线a线,b线

  1. 4资源请求->5a 分配可用资源-> 6a 请求使用资源-> 7a 提供资源->8a 提交任务
  2. 4资源请求->5b 分配待定资源-> 6b 请求新worker-> 7b 启动任务管理器->8b 注册/报告资源
    a线是分配现有资源;b线请求新资源,新资源注册后是现有资源,在a线分配
    5 集成架构

image

上图是弹性资源组件的集成架构设计
集成弹性资源组件用户需要提供业务资源消费者,业务worker控制器,以及Master组件工厂实现
业务资源消费者 负责申请资源,下发命令,通常还有分片功能,计算需要的资源数
业务worker控制器 负责接收业务资源消费者命令,启动/关闭/热配置业务worker,或执行其他用户定义的命令
master组件工厂 负责构建用户组件,构建弹性资源组件和服务,协调两者关系

6 datax集成技术架构

image

上图是弹性组件的集成架构图
 业务资源消费者
Datax Engine承担业务资源消费者角色,Datax Engine设置为job模式,分布式模式;为了简便,作业聚合统计件放在master组件
 Datax Engine controller
Datax Engine控制器负责接收解释业务消费者下发命令和分片,启动或关闭datax engine (taskgroup模式)
 Master组件工厂
7 设计和实现解释
下面章节详细解释设计细节,为了解释完整性,除了datax集成部分,还包括弹性资源部分,后者这里只简单介绍,详细可参看https://blog.csdn.net/szlhj/category_12446958.html 弹性资源设计/flink集群与资源原理分析
7.1 启动集群
image
上图用户使用脚本启动集群类图,不是集成datax专属,为了完整性简单介绍一下,主要功能载入ClusterClientFactory,构建ClusterClient,构建和初始化KubernetesClusterDescriptor,KubernetesClusterDescriptor构建master组件的Deployment对象,提交到k8s集群

7.2 部署k8s master

image

部署k8s master是集群启动的第二步,KubernetesClusterDescriptor的deployClusterInternal方法,构建部署规格,提交到k8s集群管理器,触发启动master组件
《构建master组件部署规格》使用kubeclient组件,构建k8s Deployment对象,详细可以参考《flink源码分析之功能组件(二)-kubeclient
7.3 启动master组件

image

上一节,7.1/7.2构建和提交Deployment,容器启动,执行设置的启动脚本kubernetes-consumer.sh,脚本执行ClusterEntrypoint,主要做两件事,一个是初始化服务,包括心跳,rpc,高可用,metrics等,二是构建和启动master组件,包括datax engine,rest组件,资源管理器。master组件依赖和使用服务。master组件由MasterComponentHolder持有,该组件也负责master组件的关闭。构建和启动master组件由DataxMasterComponentFactory负责,实现基本复制DefaultMasterComponentFactory,增加datax engine的构建,关联ResourceConsumer,启动datax engine。
7.3.1 构建分配器/部署器
资源消费者构建,同时构建资源分配器和部署器,为后续datax engine申请资源,部署业务worker使用
image
构建资源分配器和部署器是ResourceConsumer负责,分别使用各自工厂构建,用户可用提供ExecutionSlotAllocator.Factory,提供自己的资源分配器,实现自身的分片策略。
7.4 申请资源/部署(下发命令)

image

资源消费者(ResourceConsumer) 构建资源分配器和部署器后,datax engine(作业模式)作业执行分片,计算需要的资源数,向ResourceConsumer申请资源,同时传入命令Execution,Execution包括start命令和taskgroup,获得资源后下发命令。业务worker的DataxEngine控制器接收命令后,启动datax engine(任务组模式)处理分片。
7.5 worker启动

image

7.4申请资源/部署(下发命令) ,datax engine申请资源,若可用资源不够,弹性资源组件新建新worker,使用kubeclient组件构建worker的Deployment。容器启动执行启动脚本,运行DataxResourceProviderRunner,DataxResourceProviderRunner负责构建DataxEngineController,监听业务资源消费者命令, start命令,启动taskgroup模式的datax engine,处理taskgroup

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant