文章目录
背景
目前对于flink来说,生产环境一般有两个部署模式,一个是 session模式,一个是per job模式。
session模式
这种模式会预先在yarn或者或者k8s上启动一个flink集群,然后将任务提交到这个集群上,这种模式,集群中的任务使用相同的资源,如果某一个任务出现了问题导致整个集群挂掉,那就得重启集群中的所有任务,这样就会给集群造成很大的负面影响。
per job模式
考虑到集群的资源隔离情况,一般生产上的任务都会选择per job模式,也就是每个任务启动一个flink集群,各个集群之间独立运行,互不影响,且每个集群可以设置独立的配置。
per job模式的问题
目前,对于per job模式,jar包的解析、生成JobGraph是在客户端上执行的,然后将生成的jobgraph提交到集群。很多公司都会有自己的实时计算平台,用户可以使用这些平台提交flink任务,如果任务特别多的话,那么这些生成JobGraph、提交到集群的操作都会在实时平台所在的机器上执行,那么将会给服务器造成很大的压力。
此外这种模式提交任务的时候会把本地flink的所有jar包先上传到hdfs上相应 的临时目录,这个也会带来大量的网络的开销,所以如果任务特别多的情况下,平台的吞吐量将会直线下降。
引入application模式
所以针对flink per job模式的一些问题,flink 引入了一个新的部署模式–Application模式。 目前 Application 模式支持 Yarn 和 K8s 的部署方式,Yarn Application 模式会在客户端将运行任务需要的依赖都上传到 Flink Master,然后在 Master 端进行任务的提交。
此外,还支持远程的用户jar包来提交任务,比如可以将jar放到hdfs上,进一步减少上传jar所需的时间,从而减少部署作业的时间。
具体的使用命令是:
/bin/flink run-application -p 1 -t yarn-application \
-yD yarn.provided.lib.dirs="hdfs://localhost/flink/libs" \
hdfs://localhost/user-jars/HelloWold.jar
通过程序提交任务
当我们要做一个实时计算平台的时候,会需要通过程序来提交任务到集群,这时候需要我们自己封装一套API来实现提交flink任务到集群,目前主要的生产环境还是以yarn居多,所以我们今天讲讲怎么通过api的方式把一个任务以application的方法提交到yarn集群。
-
引入相关的配置到classpath里
core-site.xml
hdfs-site.xml
yarn-site.xml -
定义相关的配置参数
//flink的本地配置目录,为了得到flink的配置
String configurationDirectory = "/Users/user/work/flink/conf/";
//存放flink集群相关的jar包目录
String fl

本文深入探讨了Flink的Application模式,对比了session和perjob模式,详细解析了Application模式如何解决perjob模式的局限性,特别是在大规模部署场景下。介绍了如何通过API提交任务,并分析了Application模式的源码流程,包括集群部署、任务提交和执行过程。
最低0.47元/天 解锁文章
1891





