Flink 部署模式
1、部署模式
flink 支持3种部署模式:
- 会话模式(Session Mode)
- 单作业模式(Per-Job Mode)
- 应用模式(Application Mode)
三种模式区别在于:集群的生命周期&资源的分配方式,以及作业的main方法在客户端(Client)还是JobManager执行
1.1、会话模式
会话模式需要先启动一个集群,保持一个会话,在会话中通过客户端提交作业,集群启动时,集群资源已经确定了,所以提交的任务会竞争集群中的资源,直到作业运行完毕释放集群资源给其余作业。
在会话模式中,我们只需要一个集群,所有的作业提交后都塞到了一个集群内,集群的生命周期超越于作业执行周期,铁打的集群流水的作业,作业结束后释放集群资源,集群依然正常运行;这样的缺点是:由于资源共享,所以资源不足时,提交新的作业会失败。另外;同一个taskManager可能会运行多个作业,如果其中一个发生故障导致taskManager宕机,那么当前taskManager所有作业都会失败。会话模式比较适合单个规模小,执行时间短的打大量作业。
1.2、单作业模式(Per-Job Mode)
会话模式由于资源共享会导致许多问题,为了更好的隔离资源,我们可以考虑为每个作业启动一个集群,这就是单作业模式;
单作业模式是严格的一对一,集群只为这个作业而生,同样由客户端运行应用程序,然后启动集群,作业提交给JobManager,进而发送给taskManager执行。作业完成后,集群就会关闭,所有资源随机释放,这样一来,每个作业都有它自己的JobManager管理,占用共享的资源,即使发生故障,它的taskManager也不会影响到其它作业,说明:单作业模式需要借助一些资源管理框架来启动集群,比如Yarn,k8s。
1.3、应用模式(Application Mode)
会话模式&单作业模式都是在客户端上执行,然后由客户端提交给JobManager的。但是这种方式客户端需要占用大量的网络带宽,去下载依赖并把二进制数据发给JobManager,加上很多情况下提交作业用的是同一个客户端,就会加重客户端所在节点的资源开销。为了解决这个问题,不使用客户端了,直接把作业提交到JobManager上运行。这意味着,每提交一个作业就启动一个JobManager,构建一个集群,这个JobManager只为一个作业而存在,执行完作业,当前JobManager随之关闭。
应用模式与单作业模式都是提交作业之后创建集群,单作业模式是通过客户端来提交,客户端解释出的每一个作业对应一个集群;应用模式是直接由Jobmanager执行应用程序,并且即使应用包含了多个作业,也只创建一个集群。
在会话模式下:集群的生命周期独立于集群上运行的人和作业的生命周期,并且提交的作业共享资源。单作业模式为每个提交的作业创建一个集群,有更好的资源隔离,此时集群生命周期和作业生命周期进行了绑定。应用模式为每个应用创建一个会话集群,在JobManager上直接调用程序的main方法;