根據(jù)集群的生命周期、資源隔離方式和應用程序的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择葡。該模式集群會預先啟動懦趋、長時間運行,并且能夠接收多個job提交運行千诬。也就是提交到集群的job共享一套flink runtime cluster(JobManager和TaskManager)。
該模式特點如下:
生命周期:集群生命周期不受job影響过咬,只有手動關閉會話大渤,集群才會被停止制妄。
資源隔離:所有job共用一套JobManager和TaskManager掸绞,所有job間存在集群資源競爭,比如提交job階段的帶寬耕捞。并且當節(jié)點發(fā)生FO時衔掸,會影響多個job(JobManager crash會影響所有job)。
-
模式優(yōu)點:
- 集群所有節(jié)點都預先啟動俺抽,無需每次啟動作業(yè)都申請資源敞映、啟動節(jié)點,尤其對于作業(yè)執(zhí)行時間段磷斧、對job啟動時間敏感的任務振愿。
- 資源充分共享,提升資源利用率弛饭。
-
模式缺點:
- 資源隔離比較差冕末。
- 非Native部署,TaskManager不容易擴展侣颂,Slot計算資源伸縮比較差档桃。
Client負載:Client負載比較大,需要生成JobGraph憔晒,并將JobGraph及其依賴jar提交到JobManager藻肄。
Flink Job Cluter(per-job mode)
Flink Job Cluster集群部署模式又稱為per-job mode蔑舞。該模式與Job綁定,集群管理器會為每個Job啟動一個flink runtime cluster(JobManager和TaskManager)嘹屯。Client會首先向集群管理器請求資源來啟動JobManager攻询,并將job提交給其內(nèi)部的Dispatcher,TaskManager根據(jù)job的資源請求延遲分配啟動的州弟。
該模式特點如下:
生命周期:集群生命周期和job綁定蜕窿,job停止后集群也會被停止。
資源隔離:單個Job獨享一套JobManager和TaskManager呆馁,不存在資源競爭問題桐经。并且節(jié)點發(fā)生FO后,只會影響單個job浙滤。
-
模式優(yōu)點:
- Job之間資源充分隔離阴挣,不會互相影響。
- 資源資源根據(jù)job所需來申請纺腊。
-
模式缺點:
- job啟動慢畔咧,因為ResourceManager需要向外部資源管理器請求資源來啟動TaskManager。所以一般適合long runtime類型job運行揖膜。
- 資源相較浪費誓沸,每個job都需要啟動一個JobManager。
Client負載:Client負載比較大壹粟,需要生成JobGraph拜隧,并將JobGraph及其依賴jar上傳到JobManager。
NOTE: Flink Job Cluster模式不支持部署在Kubernetes上趁仙。
Flink Application Cluster(application mode)
Flink Application Cluster集群部署模式又稱為Application mode洪添。該模式集群屬于專屬集群模式,只會執(zhí)行一個Flink Application中的job雀费,集群管理器為每個Flink Application啟動一個flink runtime cluster(JobManager和TaskManager)干奢。并且應用程序的main方法是運行在Cluster中,而不是client上盏袄。
該模式可以看做是對per-job模式和session模式的優(yōu)化部署模式忿峻。集群執(zhí)行job粒度上,相較前兩者找到了更好的一個隔離點辕羽,并且減輕了Client的負載逛尚。
該模式特點如下:
生命周期:生命周期和Flink Application綁定,當Application全部執(zhí)行完逛漫,集群才會停止黑低。
資源隔離:Flink Application使用一套JobManager和TaskManager,相較前兩種模式找到了一個比較好的隔離點。
-
模式優(yōu)點:
- 降低Client負載克握。
- Application之間實現(xiàn)資源隔離蕾管,Application內(nèi)實現(xiàn)資源共享。
-
模式缺點:
- 暫無
Client負載:用戶將代碼邏輯和相關依賴打到一個jar中菩暗。Client只需負責作業(yè)提交(不包括作業(yè)上傳)掰曾,所以負載非常輕。
NOTE: Application mode中的多個job停团,實際在代碼上的表現(xiàn)就是能夠允許在一個Application里面調(diào)用多次execute/executeAsyc方法旷坦。但是execute方法會被阻塞,也就是只有一個job完成之后才能繼續(xù)下一個job的execute佑稠,但是可以通過executeAsync進行異步非阻塞執(zhí)行秒梅。
另一個需要注意的點是,對于Application mode的進行HA部署時舌胶,是不支持多個execute執(zhí)行的捆蜀。