架構(gòu)圖
官網(wǎng)原圖:https://ci.apache.org/projects/flink/flink-docs-release-1.13/fig/processes.svg
Flink 運行時至少包含兩個進(jìn)程:1個JobManager
和至少1個TaskManager
另锋。
角色
Flink Program(客戶端)
- 作用:
負(fù)責(zé)將程序代碼解析成數(shù)據(jù)流圖(Dataflow graph)蒋情,并發(fā)送給 JobManager锨亏,不負(fù)責(zé)邏輯處理。
嚴(yán)格上說, 客戶端不是運行和程序執(zhí)行的一部分, 而是用于準(zhǔn)備和發(fā)送dataflow到JobManager. 然后客戶端可以斷開與JobManager的連接(detached mode), 也可以繼續(xù)保持與JobManager的連接(attached mode)
客戶端作為觸發(fā)執(zhí)行的java或者scala代碼的一部分運行, 也可以在命令行運行:bin/flink run ...
JobManager(老大纵诞,策劃上祈,負(fù)責(zé)job的分配)
- 作用:
接收來著Client(Flink Program)的數(shù)據(jù)Dataflow graph),并重新劃分成更加詳細(xì)的ExecutionGraph,然后交由TaskManager執(zhí)行雇逞。
控制一個應(yīng)用程序執(zhí)行的主進(jìn)程,也就是說茁裙,每個應(yīng)用程序都會被一個的JobManager所控制執(zhí)行塘砸。
JobManager會先接收到要執(zhí)行的應(yīng)用程序,這個應(yīng)用程序會包括:作業(yè)圖(JobGraph)晤锥、邏輯數(shù)據(jù)流圖(logical dataflow graph)和打包了所有的類掉蔬、庫和其它資源的JAR包。
JobManager會把JobGraph轉(zhuǎn)換成一個物理層面的數(shù)據(jù)流圖矾瘾,這個圖被叫做“執(zhí)行圖”(ExecutionGraph)女轿,包含了所有可以并發(fā)執(zhí)行的任務(wù)。JobManager會向資源管理器(ResourceManager)請求執(zhí)行任務(wù)必要的資源壕翩,也就是任務(wù)管理器(TaskManager)上的插槽(slot)蛉迹。一旦它獲取到了足夠的資源,就會將執(zhí)行圖分發(fā)到真正運行它們的TaskManager上放妈。
而在運行過程中北救,JobManager會負(fù)責(zé)所有需要中央?yún)f(xié)調(diào)的操作,比如說檢查點(checkpoints)的協(xié)調(diào)芜抒。
JobManager包含3個不同的組件
- ResourceManager(一個集群就只有一個
ResourceManager
)
負(fù)責(zé)資源的管理珍策,在整個 Flink 集群中只有一個 ResourceManager.
注意這個ResourceManager不是Yarn中的ResourceManager, 是Flink中內(nèi)置的
, 只是趕巧重名了而已.
主要負(fù)責(zé)管理任務(wù)管理器(TaskManager)的插槽(slot)
,TaskManger插槽是Flink中定義的處理資源單元宅倒。當(dāng)JobManager申請插槽資源時攘宙,ResourceManager會將有空閑插槽的TaskManager分配給JobManager。如果ResourceManager沒有足夠的插槽來滿足JobManager的請求拐迁,它還可以向資源提供平臺(YARN
)發(fā)起會話蹭劈,以提供啟動TaskManager進(jìn)程的容器。另外唠亚,ResourceManager還負(fù)責(zé)終止空閑的TaskManager链方,釋放計算資源
- Dispatcher
負(fù)責(zé)接收用戶提供的作業(yè),并且
負(fù)責(zé)為這個新提交的作業(yè)啟動一個新的JobMaster 組件
. Dispatcher也會啟動一個Web UI灶搜,用來方便地展示和監(jiān)控作業(yè)執(zhí)行的信息祟蚀。Dispatcher在架構(gòu)中可能并不是必需的,這取決于應(yīng)用提交運行的方式割卖。
- JobMaster(
每一個job都有一個JobMaster
)
JobMaster負(fù)責(zé)管理
單個
JobGraph的執(zhí)行.多個Job可以同時運行在一個Flink集群中, 每個Job都有一個自己的JobMaster.
對于 yarn-session 模式前酿,可能會有多個job到一個集群中,所以有多個JobMaster
鹏溯,對于yarn-pro-job 或 yarn-application而言罢维,一個job一個集群,所以就一個JobMaster
丙挽。
-
粗粒度的流程圖
工作機制
TaskManager(小弟肺孵,真正干活的人)
Flink中的工作
進(jìn)程
匀借。通常在Flink中會有多個TaskManager運行,每一個TaskManager都包含了一定數(shù)量的插槽(slots)
平窘。插槽的數(shù)量限制了TaskManager能夠執(zhí)行的任務(wù)數(shù)量吓肋。
啟動之后,TaskManager會向資源管理器注冊它的插槽瑰艘;收到資源管理器的指令后是鬼,TaskManager就會將一個或者多個插槽提供給JobManager調(diào)用。JobManager就可以向插槽分配任務(wù)(tasks)來執(zhí)行了紫新。
在執(zhí)行過程中均蜜,一個TaskManager可以跟其它運行同一應(yīng)用程序的TaskManager交換數(shù)據(jù)。
- 作用:
按照Executor Graph的規(guī)劃執(zhí)行業(yè)務(wù)邏輯芒率。