前言
在一些應(yīng)用場景中渐扮,對于集群資源分配和占用的方式诸典,可能會有特定的需求。Flink 為各種場景提供了不同的部署模式活逆,主要有以下三種:
- 會話模式(Session Mode)
- 單作業(yè)模式(Per-Job Mode)
- 應(yīng)用模式(Application Mode)
它們的區(qū)別主要在于:集群的生命周期以及資源的分配方式铅忿;以及應(yīng)用的 main 方法到底在哪里執(zhí)行——客戶端(Client)還是 JobManager剪决。
一、會話模式(Session Mode)
啟動一個集群,保持會話昼捍,在這個會話中识虚,通過客戶端提交作業(yè),集群啟動時所有資源就都已經(jīng)確定妒茬,所以所有提交的作業(yè)會競爭集群中的資源担锤。
這樣的好處很明顯,我們只需要一個集群乍钻,就像一個大箱子肛循,所有的作業(yè)提交之后都塞進(jìn)去;集群的生命周期是超越于作業(yè)之上的银择,作業(yè)結(jié)束了就釋放資源多糠,集群依然正常運(yùn)行。
當(dāng)然缺點(diǎn)也是顯而易見的:因為資源是共享的浩考,所以資源不夠了夹孔,提交新的作業(yè)就會失敗。另外析孽,同一個 TaskManager 上可能運(yùn)行了很多作業(yè)搭伤,如果其中一個發(fā)生故障導(dǎo)致 TaskManager 宕機(jī),那么所有作業(yè)都會受到影響袜瞬。
會話模式比較適合于單個規(guī)模小怜俐、執(zhí)行時間短的大量作業(yè)。
先啟動集群再提交作業(yè)邓尤,這種方式其實(shí)就是會話模式拍鲤。
二、單作業(yè)模式(Per-Job Mode)
會話模式因為資源共享會導(dǎo)致很多問題汞扎,所以為了更好地隔離資源季稳,我們可以考慮為每個提交的作業(yè)啟動一個集群,這就是所謂的單作業(yè)(Per-Job)模式澈魄,
單作業(yè)模式也很好理解绞幌,就是嚴(yán)格的一對一,集群只為這個作業(yè)而生一忱。同樣由客戶端運(yùn)行應(yīng)用程序,然后啟動集群谭确,作業(yè)被提交給 JobManager帘营,進(jìn)而分發(fā)給 TaskManager 執(zhí)行。作業(yè)完成后逐哈,集群就會關(guān)閉芬迄,所有資源也會釋放。這樣一來昂秃,每個作業(yè)都有它自己的 JobManager管理禀梳,占用獨(dú)享的資源杜窄,即使發(fā)生故障,它的 TaskManager 宕機(jī)也不會影響其他作業(yè)算途。
這些特性使得單作業(yè)模式在生產(chǎn)環(huán)境運(yùn)行更加穩(wěn)定塞耕,所以是實(shí)際應(yīng)用的首選模式。需要注意的是嘴瓤,F(xiàn)link 本身無法直接這樣運(yùn)行扫外,所以單作業(yè)模式一般需要借助一些資源管理框架來啟動集群,比如 YARN廓脆、Kubernetes筛谚。
三、應(yīng)用模式(Application Mode)
前面提到的兩種模式下停忿,應(yīng)用代碼都是在客戶端上執(zhí)行驾讲,然后由客戶端提交給 JobManager的。但是這種方式客戶端需要占用大量網(wǎng)絡(luò)帶寬席赂,去下載依賴和把二進(jìn)制數(shù)據(jù)發(fā)送給JobManager吮铭;加上很多情況下我們提交作業(yè)用的是同一個客戶端,就會加重客戶端所在節(jié)點(diǎn)的資源消耗氧枣。
所以解決辦法就是沐兵,我們不要客戶端了,直接把應(yīng)用提交到 JobManger 上運(yùn)行便监。而這也就代表著扎谎,我們需要為每一個提交的應(yīng)用單獨(dú)啟動一個 JobManager,也就是創(chuàng)建一個集群烧董。這個 JobManager 只為執(zhí)行這一個應(yīng)用而存在毁靶,執(zhí)行結(jié)束之后 JobManager 也就關(guān)閉了,這就是所謂的應(yīng)用模式逊移。
應(yīng)用模式與單作業(yè)模式预吆,都是提交作業(yè)之后才創(chuàng)建集群;單作業(yè)模式是通過客戶端來提交的胳泉,客戶端解析出的每一個作業(yè)對應(yīng)一個集群拐叉;而應(yīng)用模式下,是直接由 JobManager 執(zhí)行應(yīng)用程序的扇商,并且即使應(yīng)用包含了多個作業(yè)凤瘦,也只創(chuàng)建一個集群。
總結(jié)一下案铺,在會話模式下蔬芥,集群的生命周期獨(dú)立于集群上運(yùn)行的任何作業(yè)的生命周期,并且提交的所有作業(yè)共享資源。而單作業(yè)模式為每個提交的作業(yè)創(chuàng)建一個集群笔诵,帶來了更好的資源隔離返吻,這時集群的生命周期與作業(yè)的生命周期綁定。最后乎婿,應(yīng)用模式為每個應(yīng)用程序創(chuàng)建一個會話集群测僵,在 JobManager 上直接調(diào)用應(yīng)用程序的 main()方法。
參考:
https://blog.csdn.net/weixin_45417821/article/details/124041083