弹性资源组件提供动态资源能力,是分布式系统关键基础设施,分布式datax,分布式索引,事件引擎都需要集群和资源的弹性资源能力,提高伸缩性和作业处理能力。
本文介绍弹性资源组件的设计,包括架构设计和详细设计,指导开发人员代码开发,设计基于《flink原理源码分析(一) 集群与资源@k8s》,抽出作业管理器,包括其内部的调度器,通用化为资源消费者,标准化与资源管理器和任务管理器的交互接口;增加约束,如,组件间通讯rpc组件,高可用组件,心跳组件等,最大程度使用原flink代码,后续的迭代不断标准化,抽象化交互接口,支持不同的实现。
资源消费者/资源管理器/任务管理器 弹性资源组件关联的3个主要角色
《flink原理源码分析(一) 集群与资源@k8s》 详细分析了flink集群与资源的源码和原理
上图是场景视图
集群启动,master和worker构建,k8s环境下,涉及k8s客户端的使用
资源的申请,管有资源
资源的提供,任务执行
功能组件的原理和用法解释
描述弹性资源组件接入规范
弹性资源组件的技术架构图,其中作业管理器接入系统提供,需实现与资源管理器和任务管理器的交互, 还有一些技术要求。
总体架构是master-worker,master的高可用是k8s的复制机制提供,选主机制k8s提供,作业管理器和资源管理器参与选主,作业管理器/任务管理器接入资源管理器主节点监听,获取最新资源管理器;作业管理器接入作业管理器主节点监听,获取最新的作业管理器主节点
数据架构,资源是组件的核心数据,分两条线a线 现有资源,b线 待定资源
a线是分配现有资源;b线请求新资源,新资源注册后是现有资源,在a线分配
上图弹性资源组件架构,作为SDK,提供RPC,slot池,心跳,高可用等组件支持,这些组件有约束的,有可选用的
集群是资源的载体,弹性资源基础是弹性的集群,弹性资源集群架构采用master-worker,首先启动master,master包括资源消费者,资源管理器,master是弹性的决策器,控制worker的部署和释放
管理员通过命令行或管理台,启动集群,提供环境配置和参数配置;部署k8smaster,使用kuebclient发起构建Deplolyment资源和其他资源
k8s集群管理器收到部署请求执行master启动脚本,部署和启动master,随着资源消费者的资源申请,部署和启动新的任务管理器
Configuration配置容器
部署k8s master是集群启动的第二步,KubernetesClusterDescriptor的deployClusterInternal方法,构建部署规格,使用flink kubeclient提交到k8s集群管理器,触发部署和启动master
启动集群触发部署和启动master,包括资源消费者,资源管理器,其中资源消费者接入系统提供,并提供工厂实现
上图是构建和启动弹性资源master的交互图,参看构建kubeclient构建master组件的CmdMasterDecorator设置了容器初始执行脚本和参数,集群初始入口KubernetesClusterEntryPoint
2. KubernetesClusterEntrypoint继承ClusterEntrypoint,MasterComponentFactory关联接入系统提供的ResourceConsumerComponentFactory,用于构建资源消费者
3. 经过容错日志,插件文件系统初始化,进入ClusterEntrypoint的runCluster,该方法主要做两个事,initializeServices和MasterComponent
4. initializeServices构建基础服务,Rpc服务,slot池组件,ha服务,metrics服务等
5. MasterComponent master组件初始化和启动;同时也是持有者,用于后面关闭和清理
至此,master启动,资源消费者消费资源,资源管理器随着资源消费部署和启动新的任务管理器
资源管理器按需启动任务管理器增加资源
设置执行脚本KUBERNETES_TASK_MANAGER_SCRIPT_PATH= "elastic-source-worker.sh"
主入口KubernetesTaskExecutorRunner main
2. 任务管理器启动比较简单,主要启动rpc服务和高可用组件,高可用组件触发注册任务管理器/报告资源
弹性资源组件elastic-resource设计(三)-资源管理器
弹性资源组件elastic-resource设计(四)-任务管理器
弹性资源组件elastic-resource设计(五)-资源消费者接入规范
弹性资源组件elastic-resource设计(六)-功能组件,rpc,心跳,slotpool,metrics,kubeclient