searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Flink on K8s 的架构演进

2023-05-30 06:20:33
157
0

1. Flink Standalone Cluster

(1)Standalone Cluster:在多job任务多租户的quota管理和隔离方面存在问题,运维管理难度大

(2)Flink Cluster on Kubernetes 的部署模式:只利用Flink cluster和K8s deployment、service等基础能力,简化了cluster的部署流程;可通过每个job一个cluster的方式运行来解决隔离问题,但对运维管理和资源利用率有较大挑战

(3)Helm chart方式进一步简化on k8s的部署

(4)Flink K8s Operator:通过遵循K8s的CRD+Operator范式,可以更原生的利用K8s的能力来管理Flink job的生命周期等,也可以通过Operator监视任务运行情况,进行一定的cluster弹性伸缩

总结:

  • 无论 Operator、Helm Chart 或者是直接使用 Kubectl Yaml 的方式,Flink 都感知不到 K8s 的存在。

  • 目前主要使用静态的资源分配。需要提前确认好需要多少个 TaskManager,如果 Job 的并发需要做一些调整,TaskManager 的资源情况必须相应的跟上,否则任务无法正常执行。

  • 用户需要对一些 Container、Operator 或者 K8s 有一些最基本的认识,这样才能保证顺利将 Flink 运行到 K8s 之上。

  • 对于批处理任务,或者想在一个 Session 里提交多个任务不太友好。无法实时申请资源和释放资源。因为 TaskManager 的资源是固定的,批处理任务可能会分多个阶段去运行,需要去实时地申请资源、释放资源,当前也无法实现。如果需要在一个 Session 里跑多个 Job 并且陆续运行结束当前也无法实现。这时如果维持一个比较大的 Session Cluster,可能会资源浪费。但如果维持的 Session Cluster 比较小,可能会导致 Job 跑得慢或者是跑不起来。

基于这几点,Flink社区推进了一个 Native 的集成方案,这个 Native 类似于 Yarn 这种原生的集成,就是让 Flink 原生的感知到下层 Cluster 的存在。

2. Flink Native Integration的新架构

为什么叫 Native 方式?包括如下几个含义。

  • 资源申请方式:Flink 的 Client 内置了一个 K8s Client,可以借助 K8s Client 去创建 JobManager,当 Job 提交之后,如果对资源有需求,JobManager 会向 Flink 自己的 ResourceManager 去申请资源。这个时候 Flink 的 ResourceManager 会直接跟 K8s 的 API Server 通信,将这些请求资源直接下发给 K8s Cluster,告诉它需要多少个 TaskManger,每个 TaskManager 多大。当任务运行完之后,它也会告诉 K8s Cluster 释放没有使用的资源。相当于 Flink 用很原生的方式了解到 K8s Cluster 的存在,并知晓何时申请资源,何时释放资源。

  • Native 是相对于 Flink 而言的,借助 Flink 的命令就可以达到自治的一个状态,不需要引入外部工具就可以通过 Flink 完成任务在 K8s 上的运行。

(1)首先,对Flink自身架构进行了重构,实现对不同集群管理系统的适配

(2)在新架构基础上,实现了Native on K8s的新模式

(3)Flink K8s Operator的整合:资源的动态管理交由Flink任务自身,Operator负责任务的管理控制,相互协作,实现运行模式和管理全面Native on K8s

0条评论
0 / 1000
阿德
4文章数
1粉丝数
阿德
4 文章 | 1 粉丝
原创

Flink on K8s 的架构演进

2023-05-30 06:20:33
157
0

1. Flink Standalone Cluster

(1)Standalone Cluster:在多job任务多租户的quota管理和隔离方面存在问题,运维管理难度大

(2)Flink Cluster on Kubernetes 的部署模式:只利用Flink cluster和K8s deployment、service等基础能力,简化了cluster的部署流程;可通过每个job一个cluster的方式运行来解决隔离问题,但对运维管理和资源利用率有较大挑战

(3)Helm chart方式进一步简化on k8s的部署

(4)Flink K8s Operator:通过遵循K8s的CRD+Operator范式,可以更原生的利用K8s的能力来管理Flink job的生命周期等,也可以通过Operator监视任务运行情况,进行一定的cluster弹性伸缩

总结:

  • 无论 Operator、Helm Chart 或者是直接使用 Kubectl Yaml 的方式,Flink 都感知不到 K8s 的存在。

  • 目前主要使用静态的资源分配。需要提前确认好需要多少个 TaskManager,如果 Job 的并发需要做一些调整,TaskManager 的资源情况必须相应的跟上,否则任务无法正常执行。

  • 用户需要对一些 Container、Operator 或者 K8s 有一些最基本的认识,这样才能保证顺利将 Flink 运行到 K8s 之上。

  • 对于批处理任务,或者想在一个 Session 里提交多个任务不太友好。无法实时申请资源和释放资源。因为 TaskManager 的资源是固定的,批处理任务可能会分多个阶段去运行,需要去实时地申请资源、释放资源,当前也无法实现。如果需要在一个 Session 里跑多个 Job 并且陆续运行结束当前也无法实现。这时如果维持一个比较大的 Session Cluster,可能会资源浪费。但如果维持的 Session Cluster 比较小,可能会导致 Job 跑得慢或者是跑不起来。

基于这几点,Flink社区推进了一个 Native 的集成方案,这个 Native 类似于 Yarn 这种原生的集成,就是让 Flink 原生的感知到下层 Cluster 的存在。

2. Flink Native Integration的新架构

为什么叫 Native 方式?包括如下几个含义。

  • 资源申请方式:Flink 的 Client 内置了一个 K8s Client,可以借助 K8s Client 去创建 JobManager,当 Job 提交之后,如果对资源有需求,JobManager 会向 Flink 自己的 ResourceManager 去申请资源。这个时候 Flink 的 ResourceManager 会直接跟 K8s 的 API Server 通信,将这些请求资源直接下发给 K8s Cluster,告诉它需要多少个 TaskManger,每个 TaskManager 多大。当任务运行完之后,它也会告诉 K8s Cluster 释放没有使用的资源。相当于 Flink 用很原生的方式了解到 K8s Cluster 的存在,并知晓何时申请资源,何时释放资源。

  • Native 是相对于 Flink 而言的,借助 Flink 的命令就可以达到自治的一个状态,不需要引入外部工具就可以通过 Flink 完成任务在 K8s 上的运行。

(1)首先,对Flink自身架构进行了重构,实现对不同集群管理系统的适配

(2)在新架构基础上,实现了Native on K8s的新模式

(3)Flink K8s Operator的整合:资源的动态管理交由Flink任务自身,Operator负责任务的管理控制,相互协作,实现运行模式和管理全面Native on K8s

文章来自个人专栏
云原生架构
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0