<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Flink 核心組件原理 多圖剖析

          共 2758字,需瀏覽 6分鐘

           ·

          2020-12-22 22:59

          一、Flink 整體架構(gòu)

          Flink 集群整體遵循 Master ,Worker 這樣的架構(gòu)模式。
          JobManager 是管理節(jié)點(diǎn),有以下幾個(gè)職責(zé):
          • 接受 application,包含 StreamGraph(DAG),JobGraph(優(yōu)化過(guò)的)和 JAR,將 JobGraph 轉(zhuǎn)換為 Execution Graph
          • 申請(qǐng)資源,調(diào)度任務(wù),執(zhí)行任務(wù),保存作業(yè)的元數(shù)據(jù),如Checkpoint
          • 協(xié)調(diào)各個(gè) Task 的 Checkpoint。
          TaskManager 是工作節(jié)點(diǎn),負(fù)責(zé)數(shù)據(jù)交換,跑多個(gè)線程的 task,執(zhí)行任務(wù)。
          Client 是客戶端,接收用戶提交的 jar 包,產(chǎn)生一個(gè) JobGraph 對(duì)象,提交到 JobManager。如果成功提交會(huì)返回一個(gè) JobClient,用來(lái)和 JobManager 通信獲得任務(wù)執(zhí)行的狀態(tài)。

          二、JobManager 內(nèi)部組成原理

          1. 負(fù)責(zé) Checkpoint 的協(xié)調(diào),通過(guò)定時(shí)做快照的方式記錄任務(wù)狀態(tài)信息;
          2. Job Dispatch 負(fù)責(zé)接收客戶端發(fā)送過(guò)來(lái)的 JobGraph 對(duì)象(DAG),并且在內(nèi)部生成 ExecutionGraph(物理執(zhí)行圖);
          3. 將作業(yè)拆分成 Task,部署到不同的 TaskManager 上去執(zhí)行;ctorSystem 是 基于 akka 實(shí)現(xiàn)的一個(gè)通信模塊,負(fù)責(zé)節(jié)點(diǎn)之間的通信,如 Client 和 JobManager 之間,JobManager 和 TaskManager 之間的通信;
          4. 負(fù)責(zé)資源管理,對(duì)于不同的部署模式,有相應(yīng)的 ResourceManager 的實(shí)現(xiàn);
          5. TaskManager 啟動(dòng)時(shí),會(huì)向 JobManager 注冊(cè)自己,并時(shí)刻和 JobManager 保持心跳。

          三、TaskManager 內(nèi)部原理

          1. TaskManager 是作為一個(gè)虛擬機(jī)進(jìn)程存在,TaskManager 啟動(dòng)的時(shí)候,會(huì)向 JobManager 注冊(cè)自己;
          2. JobManager 提交作業(yè)的時(shí)候,TaskManager 會(huì)啟動(dòng) Task 線程將 Job 運(yùn)行起來(lái),TaskManager 里面有線程池負(fù)責(zé)線程的調(diào)度執(zhí)行。
          3. 在 Flink 內(nèi)部也會(huì)有類似 Spark 或者 MapReduce 節(jié)點(diǎn) shuffle 的過(guò)程,比如進(jìn)行了一個(gè) GroupByKey 的操作,就會(huì)涉及到數(shù)據(jù)的交互;Network Manager 是基于 Netty 實(shí)現(xiàn)的一個(gè)數(shù)據(jù)傳輸模塊;
          4. 而節(jié)點(diǎn)和節(jié)點(diǎn)之間的通信是基于 akka 實(shí)現(xiàn)的 Actor System,來(lái)進(jìn)行遠(yuǎn)程的 rpc 通信;
          5. Memory Management 是內(nèi)存管理模塊,當(dāng)數(shù)據(jù)進(jìn)來(lái)時(shí),負(fù)責(zé)申請(qǐng)內(nèi)存來(lái)運(yùn)行任務(wù)。

          TaskManager?如何負(fù)責(zé)數(shù)據(jù)傳輸

          在一個(gè)運(yùn)行的application中,它的tasks在持續(xù)交換數(shù)據(jù)。TaskManager負(fù)責(zé)做數(shù)據(jù)傳輸。
          TaskManager的網(wǎng)絡(luò)組件首先從緩沖buffer中收集records,然后再發(fā)送。也就是說(shuō),records并不是一個(gè)接一個(gè)的發(fā)送,而是先放入緩沖,然后再以batch的形式發(fā)送。這個(gè)技術(shù)可以高效使用網(wǎng)絡(luò)資源,并達(dá)到高吞吐。
          每個(gè)TaskManager有一組網(wǎng)絡(luò)緩沖池(默認(rèn)每個(gè)buffer是32KB),用于發(fā)送與接受數(shù)據(jù)。
          如發(fā)送端和接收端位于不同的TaskManager進(jìn)程中,則它們需要通過(guò)操作系統(tǒng)的網(wǎng)絡(luò)棧進(jìn)行交流。
          流應(yīng)用需要以管道的模式進(jìn)行數(shù)據(jù)交換,也就是說(shuō),每對(duì)TaskManager會(huì)維持一個(gè)永久的TCP連接用于做數(shù)據(jù)交換。
          在shuffle連接模式下(多個(gè)sender與多個(gè)receiver),每個(gè)sender task需要向每個(gè)receiver task,此時(shí)TaskManager需要為每個(gè)receiver task都分配一個(gè)緩沖區(qū)。下圖展示了此架構(gòu):
          在上圖中,有四個(gè)sender 任務(wù),對(duì)于每個(gè)sender,都需要有至少四個(gè)network buffer用于向每個(gè)receiver發(fā)送數(shù)據(jù)。
          每個(gè)receiver都需要有至少四個(gè)buffer用于接收數(shù)據(jù)。
          TaskManager之間的buffer以多路復(fù)用的方式使用同一網(wǎng)絡(luò)連接。為了提供平滑的數(shù)據(jù)管道型的數(shù)據(jù)交換,一個(gè)TaskManager必須能提供足夠的緩沖,以服務(wù)所有并行的出入連接。
          對(duì)于shuffle或broadcast 連接,每個(gè)發(fā)送任務(wù)和每個(gè)接受任務(wù)之間都需要一個(gè)buffer。Flink的默認(rèn)網(wǎng)絡(luò)緩沖配置足夠適用與小型與中型的集群任務(wù)。對(duì)于大型的集群任務(wù),需要對(duì)此配置進(jìn)行調(diào)優(yōu)。
          若sender與receiver任務(wù)都運(yùn)行在同一個(gè)TaskManager進(jìn)程,則sender任務(wù)會(huì)將發(fā)送的條目做序列化,并存入一個(gè)字節(jié)緩沖。然后將緩沖放入一個(gè)隊(duì)列,直到隊(duì)列被填滿。Receiver任務(wù)從隊(duì)列中獲取緩沖,并反序列化輸入的條目。所以,在同一個(gè)TaskManager內(nèi),任務(wù)之間的數(shù)據(jù)傳輸并不經(jīng)過(guò)網(wǎng)絡(luò)交互。

          四、Client 內(nèi)部原理

          Client 是客戶端,當(dāng)用戶寫好一個(gè) Flink 的程序之后,會(huì)用 bin/flink run 這樣的方式去提交 jar 包。
          然后會(huì)啟動(dòng)一個(gè) Client 的進(jìn)程,找到 jar 包中的 main 方法,創(chuàng)建 Context Environment (執(zhí)行環(huán)境),把代碼解析成 JobGraph (有向無(wú)環(huán)圖表示的作業(yè)), 向 JobManager 提交 JobGraph ,并傳遞用戶提交的 jar 包。
          當(dāng)程序部署在 jarn session 或者 kerbernetes Session 的時(shí)候,客戶端也會(huì)進(jìn)行部署的操作。

          五、JobGraph

          不管用戶寫的程序是 DataStream Api,DateSet Api,或者是 Flink SQL,都會(huì)打成 jar 包,jar 包中會(huì)寫入 main 方法的類,Client 進(jìn)程啟動(dòng)的時(shí)候就會(huì)執(zhí)行 main 方法,解析出程序中所表達(dá)的邏輯,生成 StreamGraph,再優(yōu)化生成 JobGraph,再提交到 JobManager。
          這里說(shuō)的 JobGraph 其實(shí)就是在 Flink UI 界面上看到的有向無(wú)環(huán)圖,如下圖:
          另外,JobGraph 也是對(duì)集群組件的一個(gè)解耦過(guò)程,不管什么程序最終都生成 JobGraph ,JobGraph 作為 客戶端和 JobManager 提交的規(guī)范。

          --end--


          掃描下方二維碼
          添加好友,備注【交流
          可私聊交流,也可進(jìn)資源豐富學(xué)習(xí)群

          瀏覽 58
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操逼性交毛片 | 久久国产精品欧美 | 无码国产精品二区一区 | 五月丁香婷婷综合在线 | 色欲AV影院 |