根據(jù)集群的生命周期、資源隔離方式和應(yīng)用程序的main()方法執(zhí)行位置(client或者JobManager)可以將集群部署模式分為:Flink Session Cluster(session mode)、Flink Job Cluster(per-job mode) 和Flink Application Cluster(application mode)三類。

Flink Session Cluster(session mode)
Flink Session Cluster集群部署模式也稱為session mode。該模式集群會預(yù)先啟動、長時(shí)間運(yùn)行,并且能夠接收多個(gè)job提交運(yùn)行。也就是提交到集群的job共享一套flink runtime cluster(JobManager和TaskManager)。
該模式特點(diǎn)如下:
生命周期:集群生命周期不受job影響,只有手動關(guān)閉會話,集群才會被停止。
資源隔離:所有job共用一套JobManager和TaskManager,所有job間存在集群資源競爭,比如提交job階段的帶寬。并且當(dāng)節(jié)點(diǎn)發(fā)生FO時(shí),會影響多個(gè)job(JobManager crash會影響所有job)。
-
模式優(yōu)點(diǎn):
- 集群所有節(jié)點(diǎn)都預(yù)先啟動,無需每次啟動作業(yè)都申請資源、啟動節(jié)點(diǎn),尤其對于作業(yè)執(zhí)行時(shí)間段、對job啟動時(shí)間敏感的任務(wù)。
- 資源充分共享,提升資源利用率。
-
模式缺點(diǎn):
- 資源隔離比較差。
- 非Native部署,TaskManager不容易擴(kuò)展,Slot計(jì)算資源伸縮比較差。
Client負(fù)載:Client負(fù)載比較大,需要生成JobGraph,并將JobGraph及其依賴jar提交到JobManager。

Flink Job Cluter(per-job mode)
Flink Job Cluster集群部署模式又稱為per-job mode。該模式與Job綁定,集群管理器會為每個(gè)Job啟動一個(gè)flink runtime cluster(JobManager和TaskManager)。Client會首先向集群管理器請求資源來啟動JobManager,并將job提交給其內(nèi)部的Dispatcher,TaskManager根據(jù)job的資源請求延遲分配啟動的。
該模式特點(diǎn)如下:
生命周期:集群生命周期和job綁定,job停止后集群也會被停止。
資源隔離:單個(gè)Job獨(dú)享一套JobManager和TaskManager,不存在資源競爭問題。并且節(jié)點(diǎn)發(fā)生FO后,只會影響單個(gè)job。
-
模式優(yōu)點(diǎn):
- Job之間資源充分隔離,不會互相影響。
- 資源資源根據(jù)job所需來申請。
-
模式缺點(diǎn):
- job啟動慢,因?yàn)镽esourceManager需要向外部資源管理器請求資源來啟動TaskManager。所以一般適合long runtime類型job運(yùn)行。
- 資源相較浪費(fèi),每個(gè)job都需要啟動一個(gè)JobManager。
Client負(fù)載:Client負(fù)載比較大,需要生成JobGraph,并將JobGraph及其依賴jar上傳到JobManager。

NOTE: Flink Job Cluster模式不支持部署在Kubernetes上。
Flink Application Cluster(application mode)
Flink Application Cluster集群部署模式又稱為Application mode。該模式集群屬于專屬集群模式,只會執(zhí)行一個(gè)Flink Application中的job,集群管理器為每個(gè)Flink Application啟動一個(gè)flink runtime cluster(JobManager和TaskManager)。并且應(yīng)用程序的main方法是運(yùn)行在Cluster中,而不是client上。
該模式可以看做是對per-job模式和session模式的優(yōu)化部署模式。集群執(zhí)行job粒度上,相較前兩者找到了更好的一個(gè)隔離點(diǎn),并且減輕了Client的負(fù)載。
該模式特點(diǎn)如下:
生命周期:生命周期和Flink Application綁定,當(dāng)Application全部執(zhí)行完,集群才會停止。
資源隔離:Flink Application使用一套JobManager和TaskManager,相較前兩種模式找到了一個(gè)比較好的隔離點(diǎn)。
-
模式優(yōu)點(diǎn):
- 降低Client負(fù)載。
- Application之間實(shí)現(xiàn)資源隔離,Application內(nèi)實(shí)現(xiàn)資源共享。
-
模式缺點(diǎn):
- 暫無
Client負(fù)載:用戶將代碼邏輯和相關(guān)依賴打到一個(gè)jar中。Client只需負(fù)責(zé)作業(yè)提交(不包括作業(yè)上傳),所以負(fù)載非常輕。

NOTE: Application mode中的多個(gè)job,實(shí)際在代碼上的表現(xiàn)就是能夠允許在一個(gè)Application里面調(diào)用多次execute/executeAsyc方法。但是execute方法會被阻塞,也就是只有一個(gè)job完成之后才能繼續(xù)下一個(gè)job的execute,但是可以通過executeAsync進(jìn)行異步非阻塞執(zhí)行。
另一個(gè)需要注意的點(diǎn)是,對于Application mode的進(jìn)行HA部署時(shí),是不支持多個(gè)execute執(zhí)行的。