Apache Flink 的 K8s Session 提交流程

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


目录

Apache Flink 的 YARN Session 提交流程

Apache Flink 的 Per-Job 提交流程

Apache Flink 的 K8s Session 提交流程


正文

从总体上来说,在 K8s 集群上使用 Session 模式提交 Flink 作业的过程分为 3 个阶段:

  • 首先在 K8s 上启动 FlinkSession 模式的集群
  • 其次通过 Flink Client 提交作业
  • 再次进行作业调度执行

整体过程如图所示。

Apache Flink 的 K8s Session 提交流程_第1张图片


1. 启动集群

  1. Flink 客户端首先连接 Kubernetes API Server,提交 Flink 集群的资源描述文件,包括 flink-configuration-configmap.yamljobmanager-service.yamljobmanager-deployment.yamltaskmanager-deployment.yaml 等。
  2. Kubernetes Master 会根据这些资源描述文件去创建对应的 Kubernetes 实体。以 JobManager 部署为例, Kubernetes 集群中的某个节点收到请求后, Kubelet 进程会从中央仓库下载 Flink 镜像,准备和挂载卷,然后执行启动命令。Pod 启动后 Flink Master( JobManager )进程随之启动,初始化 Dispacher 和 KubernetesResourceManager 。并通过 K8s 服务对外暴露 Flink Master 的端口, K8s 服务类似于路由服务。

这两个步骤完成之后, Session 模式的集群就创建成功了,集群可以接收作业提交请求,但是此时还没有 JobMaster、TaskManager ,当提交作业需要执行时,才会按需创建。


2. 作业提交

  1. Client 用户可以通过 Flink 命令行(即 FlinkClient )向这个会话模式的集群提交任务。此时 JobGraph 会在Flink Client 端生成,然后和用户 Jar 包一起通过 RestClient 上传
  2. 作业提交成功, Dispatcher 会为每个作业启动一个 JobMaster ,将 JobGraph 交给 JobMaster 调度执行。

这两个步骤完成之后,作业进入调度执行阶段。


3. 作业调度执行

K8s Session 模式集群下, ResourceManager 向 K8s Master 申请和释放 TaskManager ,除此之外,作业的调度与执行和 Yarn 模式是一样的。

  1. JobMaster 向 KubernetesResourceManager 请求 Slot 。
  2. KubernetesResourceManager 从 Kubernetes 集群分配 TaskManager 。每个 TaskManager 都是具有唯一标识的 Pod 。KubernetesResourceManager 会为 TaskManager 生成一份新的配置文件,里面有 Flink Master 的 service name 作为地址。这样在 Flink Master failover 之后, TaskManager 仍然可以重新连上
  3. Kubernetes 集群分配一个新的 Pod 后,在上面启动 TaskManager 。
  4. TaskManager 启动后注册到 SlotManager
  5. SlotManager 向 TaskManager 请求 Slot 。

你可能感兴趣的:(大数据技术体系,flink,kubernetes)