09-flink運(yùn)行時(shí)架構(gòu)流程

一、flink運(yùn)行時(shí)架構(gòu)圖
https://ci.apache.org/projects/flink/flink-docs-release-1.11/fig/processes.svg

flink運(yùn)行時(shí)架構(gòu)流程

Flink運(yùn)行時(shí)包含2種進(jìn)程:1個(gè)JobManager和至少1個(gè)TaskManager
Flink Program:flink 程序
Program code:程序代碼
Program Dataflow:程序數(shù)據(jù)流
Optimizer/Graph Builder:優(yōu)化器/圖表構(gòu)建器:
Dataflow graph:數(shù)據(jù)流圖
Client:客戶端
Actor System:執(zhí)行系統(tǒng)
Submit job(send dataflow):提交作業(yè)(發(fā)送數(shù)據(jù)流)
Cancel/update job:取消/更新作業(yè)
JobManager:作業(yè)管理器
Scheduler:調(diào)度器

  • 圖解:基于開發(fā)的代碼,生成數(shù)據(jù)流圖,通過客戶端提交給flink集群的JobManager,JobManager通過分析計(jì)算生成可執(zhí)行的執(zhí)行圖,JobManager將任務(wù)分發(fā)給TaskManager,TaskManager將task分給Task slot進(jìn)行計(jì)算,每個(gè)任務(wù)執(zhí)行完畢數(shù)據(jù)都會(huì)向下沉(Memory & I/O Manager,Network Manager,Actor System)

1.1 客戶端

  • 嚴(yán)格上說, 客戶端不是運(yùn)行和程序執(zhí)行的一部分, 而是用于準(zhǔn)備和發(fā)送dataflow到JobManager. 然后客戶端可以斷開與JobManager的連接(detached mode), 也可以繼續(xù)保持與JobManager的連接(attached mode)
    客戶端作為觸發(fā)執(zhí)行的java或者scala代碼的一部分運(yùn)行, 也可以在命令行運(yùn)行:bin/flink run ...

1.2 JobManager

  • 控制一個(gè)應(yīng)用程序執(zhí)行的主進(jìn)程,也就是說,每個(gè)應(yīng)用程序都會(huì)被一個(gè)不同的JobManager所控制執(zhí)行。
  • JobManager會(huì)先接收到要執(zhí)行的應(yīng)用程序,這個(gè)應(yīng)用程序會(huì)包括:作業(yè)圖(JobGraph)、邏輯數(shù)據(jù)流圖(logical dataflow graph)和打包了所有的類、庫和其它資源的JAR包。
  • JobManager會(huì)把JobGraph轉(zhuǎn)換成一個(gè)物理層面的數(shù)據(jù)流圖,這個(gè)圖被叫做“執(zhí)行圖”(ExecutionGraph),包含了所有可以并發(fā)執(zhí)行的任務(wù)。JobManager會(huì)向資源管理器(ResourceManager)請求執(zhí)行任務(wù)必要的資源,也就是任務(wù)管理器(TaskManager)上的插槽(slot)。一旦它獲取到了足夠的資源,就會(huì)將執(zhí)行圖分發(fā)到真正運(yùn)行它們的TaskManager上。
  • 而在運(yùn)行過程中,JobManager會(huì)負(fù)責(zé)所有需要中央?yún)f(xié)調(diào)的操作,比如說檢查點(diǎn)(checkpoints)的協(xié)調(diào)。
    這個(gè)進(jìn)程包含3個(gè)不同的組件

1.3 ResourceManager

  • 負(fù)責(zé)資源的管理,在整個(gè) Flink 集群中只有一個(gè) ResourceManager. 注意這個(gè)ResourceManager不是Yarn中的ResourceManager, 是Flink中內(nèi)置的, 只是趕巧重名了而已.
  • 主要負(fù)責(zé)管理任務(wù)管理器(TaskManager)的插槽(slot),TaskManger插槽是Flink中定義的處理資源單元。
  • 當(dāng)JobManager申請插槽資源時(shí),ResourceManager會(huì)將有空閑插槽的TaskManager分配給JobManager。如果ResourceManager沒有足夠的插槽來滿足JobManager的請求,它還可以向資源提供平臺(tái)發(fā)起會(huì)話,以提供啟動(dòng)TaskManager進(jìn)程的容器。另外,ResourceManager還負(fù)責(zé)終止空閑的TaskManager,釋放計(jì)算資源。

1.4 Dispatcher

  • 負(fù)責(zé)接收用戶提供的作業(yè),并且負(fù)責(zé)為這個(gè)新提交的作業(yè)啟動(dòng)一個(gè)新的JobManager 組件. Dispatcher也會(huì)啟動(dòng)一個(gè)Web UI,用來方便地展示和監(jiān)控作業(yè)執(zhí)行的信息。Dispatcher在架構(gòu)中可能并不是必需的,這取決于應(yīng)用提交運(yùn)行的方式。

1.5 JobMaster

  • JobMaster負(fù)責(zé)管理單個(gè)JobGraph的執(zhí)行.多個(gè)Job可以同時(shí)運(yùn)行在一個(gè)Flink集群中, 每個(gè)Job都有一個(gè)自己的JobMaster.

1.6 TaskManager

  • Flink中的工作進(jìn)程。通常在Flink中會(huì)有多個(gè)TaskManager運(yùn)行,每一個(gè)TaskManager都包含了一定數(shù)量的插槽(slots)。插槽的數(shù)量限制了TaskManager能夠執(zhí)行的任務(wù)數(shù)量。
  • 啟動(dòng)之后,TaskManager會(huì)向資源管理器注冊它的插槽;收到資源管理器的指令后,TaskManager就會(huì)將一個(gè)或者多個(gè)插槽提供給JobManager調(diào)用。JobManager就可以向插槽分配任務(wù)(tasks)來執(zhí)行了。
  • 在執(zhí)行過程中,一個(gè)TaskManager可以跟其它運(yùn)行同一應(yīng)用程序的TaskManager交換數(shù)據(jù)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容