1 运行时
运行时提供了Flink作业运行过程依赖的基础执行环境,包含Dispatcher、ResourceManager、JobManager和TaskManager等核心组件,本节分析资源相关运行时组件构建和启动。
flink没有使用spring,缺少ioc的构建过程相当复杂,所有依赖手动关联和置入,为了共享组件,flink使用了很多中间持有共享组件的中间对象。
2 场景
3 构建和启动flink master组件
部署集群通过flink kubeclient向k8s集群管理提交flink master的Deployment,触发flink master构建和启动
上图是构建和启动的交互图,参看《构建作业管理器部署规格》的CmdJobManagerDecorator设置了初始容器脚本和参数,集群初始入口ClusterEntryPoint
1. 容器初始执行kubernetes-jobmanager.sh
ClusterEntryPoint设置为KubernetesSessionClusterEntrypoint
2.
KubernetesSessionClusterEntrypoint继承SessionClusterEntrypoint,只重新实现createDispatcherResourceManagerComponentFactory方法,设置ResourceManagerFactory为KubernetesResourceManagerFactory,就是说集群初始化逻辑与其他session集群区别不大
3. 经过容错日志,插件文件系统初始化,进入ClusterEntrypoint的runCluster,该方法主要做两个事,initializeServices和
DispatcherResourceManagerComponent
4. initializeServices构建基础服务,Rpc服务,Jmx服务,ha服务,blob服务,metics服务等,这些基础服务有些独立运行,有些业务组件使用,如,ha服务,rpc服务
5.
DispatcherResourceManagerComponent运行时组件,高可用组件的初始化/启动;同时也是持有者,用于后面关闭和清理,其中内置rest服务WebMonitorEndpoint,就是说,每个flink master支持外部rest独立访问
4 构建和启动任务管理器
构建和启动任务管理器是申请资源的一部分,按请求新worker的延申,类型分属于运行时一部分。
1. createTaskManagerPod与10.2 新建作业管理组件类似,CmdTaskManagerDecorator,装饰器实现了pod装饰,装饰主容器,设置shell执行命令
设置执行脚本
KUBERNETES_TASK_MANAGER_SCRIPT_PATH= "kubernetes-jobmanager.sh"
主入口
KubernetesTaskExecutorRunner main方法
2. 任务管理器启动比较简单,主要启动rpc服务和高可用组件,高可用触发9.5 注册任务管理器/报告资源