devops 信创在数字经济时代提升企业竞争力的关键策略
2314
2022-11-26
Flink部署模式介绍(session,per-job,application)
在一些应用场景中, 对于集群资源分配和占用的方式,可能会有特定的需求。 Flink 为各 种场景提供了不同的部署模式, 主要有以下三种:
会话模式(Session Mode)单作业模式(Per-Job Mode)应用模式(Application Mode)
它们的区别主要在于:集群的生命周期以及资源的分配方式; 以及应用的 main 方法到底 在哪里执行——客户端(Client)还是 JobManager。接下来我们就做一个展开说明。
1.会话模式(Session Mode)
会话模式比较适合于单个规模小、执行时间短的大量作业。
会话模式特点
集群生命周期:独立于任务,任务的开始、结束等不影响集群的生命周期。集群的资源隔离:所有任务都运行在一个集群上面,所以隔离性差。Flink的Slot仅能隔离内存,并不能隔离CPU资源。而且一个任务如果把TaskManager搞挂了,那上面的其它任务也会受牵连。main()方法在Client侧执行。
2.单作业模式(Per-Job Mode)
这些特性使得单作业模式在生产环境运行更加稳定,所以是实际应用的首选模式。
需要注意的是, Flink 本身无法直接这样运行, 所以单作业模式一般需要借助一些资源管理框架来启动集群, 比如 YARN 、Kubernetes。 单作业模式特点
集群生命周期:与任务生命周期同步,随任务运行而创建,随任务结束而消亡。集群的资源隔离:任务独占集群,隔离性最好。main()方法在Client侧执行。
3.应用模式(Application Mode)
前面提到的两种模式下, 应用代码都是在客户端上执行, 然后由客户端提交给JobManager 的。但是这种方式客户端需要占用大量网络带宽,去-依赖和把二进制数据发送给 JobManager;加上很多情况下我们提交作业用的是同一个客户端, 就会加重客户端所在节点的资源消耗。
集群生命周期:与Application生命周期同步,随Application运行而创建,随Application结束而消亡。集群的资源隔离:Application之间隔离,Application内的所有任务共享集群,隔离性一般。main()方法在集群侧执行。
应用模式与单作业模式, 都是提交作业之后才创建集群
单作业模式是通过客户端来提交的,客户端解析出的每一个作业对应一个集群;应用模式下,是直接由JobManager执行应用程序的, 并且即使应用包含了多个作业,也只创建一个集群。
4.总结
会话模式:集群的生命周期独立于集群上运行的任何作业的生命周期, 并且提交的所有作业共享资源。单作业模式:为每个提交的作业创建一个集群,带来了更好的资源隔离,这时集群的生命周期与作业的生命周期绑定。应用模式:为每个应用程序创建一个会话集群,在 JobManager上直接调用应用程序的main()方法。
Flink也支持一些第三方的集群管理框架,当使用这些框架时,集群的资源管理都会交给这些框架。目前支持:
Standalone:即不使用第三方集群管理框架,Flink自己管理集群。此时支持的运行模式包括:Session Cluster(Session Mode)、Application Cluster(Application Moe)。当容器化部署时(比如在Docker、K8s上面),也只支持这2种模式,不支持Job Cluster(Per-job mode)。Native Kubernetes:即使用K8s作为集群管理框架,Flink 1.12版本中已经正式可用。 需要注意该方式和在k8s上面部署Standalone集群是不一样的:Native Kubernetes是深度集成,将集群资源管理交给了k8s;而Standalone on K8s只是容器化部署而已,集群管理还是完全由Flink自己做的。该模式也不支持Job Cluster(Per-job mode),其它2种都支持。YARN:Hadoop生态最常用的资管管理、任务调度框架,功能很强大,一般在Hadoop生态部署Flink的,都会使用YARN管理Flink集群。Flink的3种运行模式在YARN上面都支持,且一般生产环境比较推荐Job Cluster(Per-job Mode)和Application Cluster(Application Mode)。Mesos:一个“古老”、强大且被广泛使用的集群管理器,与Flink集成时,不支持Application Cluster(Application Moe),其它2种都支持。
- | Session Cluster | Job Cluster | Application Cluster |
Standalone(包括on Docker,on K8s) | 支持 | 不支持 | 支持 |
Native Kubernetes | 支持 | 不支持 | 支持 |
YARN | 支持 | 支持 | 支持 |
Mesos | 支持 | 支持 | 不支持 |
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~