2021国产精品爽爽va在线_国产成人av三级在线观看_精品国产一区二区三区不卡_国产成A人亚洲精品无码樱花_99视频精品全部免费 在线

當(dāng)前位置: 首頁 >> 資訊 > > 正文

當(dāng)前快播:大數(shù)據(jù)Flink進(jìn)階(八):Apache Flink架構(gòu)介紹

2023-03-29 20:17:57來源:騰訊云

Apache Flink架構(gòu)介紹

一、Flink組件棧

在Flink的整個(gè)軟件架構(gòu)體系中,同樣遵循這分層的架構(gòu)設(shè)計(jì)理念,在降低系統(tǒng)耦合度的同時(shí),也為上層用戶構(gòu)建Flink應(yīng)用提供了豐富且友好的接口。

上圖是Flink基本組件棧,從上圖可以看出整個(gè)Flink的架構(gòu)體系可以分為三層,從下往上依次是物理部署層、Runtime 核心層、API&Libraries層。

物理部署層:

該層主要涉及Flink的部署模式,目前Flink支持多種部署模式:本地Local、集群(Standalone/Yarn)、Kubernetes,F(xiàn)link能夠通過該層支撐不同平臺(tái)的部署,用戶可以根據(jù)需要來選擇對應(yīng)的部署模式,目前在企業(yè)中使用最多的是基于Yarn進(jìn)行部署,也就是Flink On Yarn。


【資料圖】

Runtime核心層:

該層主要負(fù)責(zé)對上層不同接口提供基礎(chǔ)服務(wù),也是Flink分布式計(jì)算框架的核心實(shí)現(xiàn)層,支持分布式Stream作業(yè)的執(zhí)行、JobGraph到ExecutionGraph的映射轉(zhuǎn)換、任務(wù)調(diào)度等,將DataStream和DataSet轉(zhuǎn)成統(tǒng)一可執(zhí)行的Task Oparator,達(dá)到在流式引擎下同時(shí)處理批量計(jì)算和流式計(jì)算的目的。

API & Libraries層:

作為分布式計(jì)算框架,F(xiàn)link同時(shí)提供了支撐流計(jì)算和批計(jì)算接口,未來批計(jì)算接口會(huì)被棄用,在Flink1.15 版本中批計(jì)算接口已經(jīng)標(biāo)記為Legacy(已過時(shí)),后續(xù)版本建議使用Flink流計(jì)算接口,基于此接口之上抽象出不同應(yīng)用類型的組件庫,例如:FlinkML 機(jī)器學(xué)習(xí)庫、FlinkCEP 復(fù)雜事件處理庫、Flink Gelly 圖處理庫、SQL&Table 庫。DataSet API 和DataStream API 兩者都提供給用戶豐富的數(shù)據(jù)處理高級API,例如:Map、FlatMap操作等,同時(shí)也提供了比較底層的ProcessFunction API ,用戶可以直接操作狀態(tài)和時(shí)間等底層數(shù)據(jù)。這些API將在后面進(jìn)行介紹。

二、Flink運(yùn)行時(shí)架構(gòu)

Flink整個(gè)系統(tǒng)主要由兩個(gè)組件組成,分別為JobManager和TaskManager,F(xiàn)link架構(gòu)也遵循Master-Slave架構(gòu)設(shè)計(jì)原則,JobManager為Master節(jié)點(diǎn),TaskManager為Worker(Slave)節(jié)點(diǎn)。所有組件之間的通信都是借助于Akka Framework,包括任務(wù)的狀態(tài)以及Checkpoint觸發(fā)等信息。

Flink運(yùn)行時(shí)架構(gòu)如下,下面分別介紹下架構(gòu)中涉及到的角色作用。

Flink Clients客戶端

Flink客戶端負(fù)責(zé)將任務(wù)提交到集群,與JobManager構(gòu)建Akka連接,然后將任務(wù)提交到JobManager,通過和JobManager之間進(jìn)行交互獲取任務(wù)執(zhí)行狀態(tài)。Flink客戶端Clients不是Flink程序運(yùn)行時(shí)的一部分,作用是向JobManager準(zhǔn)備和發(fā)送dataflow,之后,客戶端可以斷開(detached mode)連接或者保持連接(attached mode)??蛻舳颂峤蝗蝿?wù)可以采用CLI方式或者通過使用Flink WebUI提交,也可以在應(yīng)用程序中指定JobManager的RPC網(wǎng)絡(luò)端口構(gòu)建ExecutionEnvironment提交Flink應(yīng)用。

JobManager

JobManager負(fù)責(zé)整個(gè)Flink集群任務(wù)的調(diào)度以及資源的管理,從客戶端中獲取提交的應(yīng)用,然后根據(jù)集群中TaskManager上TaskSlot的使用情況,為提交的應(yīng)用分配相應(yīng)的TaskSlots資源并命令TaskManger啟動(dòng)從客戶端中獲取的應(yīng)用。

JobManager相當(dāng)于整個(gè)集群的Master節(jié)點(diǎn),F(xiàn)link HA 集群中可以有多個(gè)JobManager,但整個(gè)集群中有且僅有一個(gè)活躍的JobManager,其他的都是StandBy。JobManager和TaskManager之間通過Actor System進(jìn)行通信,獲取任務(wù)執(zhí)行的情況并通過Actor System將應(yīng)用的任務(wù)執(zhí)行情況發(fā)送給客戶端。同時(shí)在任務(wù)執(zhí)行過程中,F(xiàn)link JobManager會(huì)觸發(fā)Checkpoints操作,每個(gè)TaskManager節(jié)點(diǎn)收到Checkpoint觸發(fā)指令后,完成Checkpoint操作,所有的Checkpoint協(xié)調(diào)過程都是在Flink JobManager中完成。當(dāng)任務(wù)完成后,F(xiàn)link會(huì)將任務(wù)執(zhí)行的信息反饋給客戶端,并且釋放掉TaskManager中的資源以供下一次提交任務(wù)使用。

JobManager由三個(gè)不同的組件組成:

ResourceManager:

這里說的ResourceManager不是Yarn資源管理中的ResourceManager,而是Flink中的ResourceManager,其主要負(fù)責(zé)Flink集群資源分配、管理和回收。在Flink中這里說的資源主要是TaskManager節(jié)點(diǎn)上的Task Slot計(jì)算資源,F(xiàn)link中每個(gè)提交的任務(wù)最終會(huì)轉(zhuǎn)換成task,每個(gè)task需要發(fā)送到TaskManager 上的slot中執(zhí)行(slot是資源調(diào)度最小的單位),F(xiàn)link為不同的環(huán)境和資源提供者(例如:Yarn/Kubernetes和Standalone)實(shí)現(xiàn)了對應(yīng)的ResourceManager,這些ResourceManager負(fù)責(zé)申請啟動(dòng)TaskManager獲取Slot資源。

在Standalone集群中,集群啟動(dòng)會(huì)同時(shí)啟動(dòng)TaskManager,不支持提交任務(wù)時(shí)啟動(dòng)TaskManager(沒有Per-Job任務(wù)提交模式),ResourceManager只能分配可用TaskManager的slots,而不支持自行啟動(dòng)新的TaskManager,而基于其他資源調(diào)度框架執(zhí)行任務(wù)時(shí),當(dāng)ResourceManager管理對應(yīng)的TaskManager沒有足夠的slot,會(huì)申請啟動(dòng)新的TaskManager進(jìn)程。

Dispatcher

Dispatcher提供了一個(gè)REST接口,用來提交Flink應(yīng)用程序執(zhí)行,例如CLI客戶端或Flink Web UI提交的任務(wù)最終都會(huì)發(fā)送至Dispatcher組件,由Dispatcher組件對JobGraph進(jìn)行分發(fā)和執(zhí)行,并為每個(gè)提交的作業(yè)啟動(dòng)一個(gè)新的 JobMaster,它還運(yùn)行 Flink WebUI 用來提供作業(yè)執(zhí)行信息。

JobMaster

JobMaster負(fù)責(zé)管理整個(gè)任務(wù)的生命周期,負(fù)責(zé)將Dispatcher提交上來的JobGraph轉(zhuǎn)換成ExecutionGraph(執(zhí)行圖)結(jié)構(gòu),通過內(nèi)部調(diào)度程序?qū)xecutionGraph執(zhí)行圖進(jìn)行調(diào)度和執(zhí)行,最終向TaskManager中提交和運(yùn)行Task實(shí)例,同時(shí)監(jiān)控各個(gè)Task的運(yùn)行狀況,直到整個(gè)作業(yè)中所有的Task都執(zhí)行完畢。

JobManager和ResourceManager組件一樣,JobManager組件本身也是RPC服務(wù),具備通信能力,可以與ResourceManager進(jìn)行RPC通信申請任務(wù)的計(jì)算資源,資源申請到位后,就會(huì)將對應(yīng)Task任務(wù)發(fā)送到TaskManager上執(zhí)行,當(dāng)Flink Task任務(wù)執(zhí)行完畢后,JobMaster服務(wù)會(huì)關(guān)閉,同時(shí)釋放任務(wù)占用的計(jì)算資源。所以JobMaster與對應(yīng)的Flink job是一一對應(yīng)的。

TaskManager

TaskManager負(fù)責(zé)向整個(gè)集群提供Slot計(jì)算資源,同時(shí)管理了JobMaster提交的Task任務(wù)。TaskManager會(huì)提供JobManager從ResourceManager中申請和分配的Slot計(jì)算資源,JobMaster最終會(huì)根據(jù)分配到的Slot計(jì)算資源將Task提交到TaskManager上運(yùn)行。另外,TaskManager還可緩存數(shù)據(jù),TaskManager之間可以進(jìn)行DataStream數(shù)據(jù)的交換。

一個(gè)Flink集群中至少有一個(gè)TaskManager,在TaskManager中資源調(diào)度的最小單位是 task slot ,一個(gè)TaskManger中的task Slot個(gè)數(shù)決定了當(dāng)前TaskManger最高支持的并發(fā)task個(gè)數(shù),一個(gè)task Slot中可以執(zhí)行多個(gè)算子。

可以看出,F(xiàn)link的任務(wù)運(yùn)行其實(shí)是采用多線程的方式,這和MapReduce多JVM進(jìn)程的方式有很大的區(qū)別Fink能夠極大提高CPU使用效率,在多個(gè)任務(wù)和Task之間通過TaskSlot方式共享系統(tǒng)資源,每個(gè)TaskManager中通過管理多個(gè)TaskSlot資源池進(jìn)行對資源進(jìn)行有效管理。

標(biāo)簽: