Flink學習筆記:整體架構

開一個新坑,系統性的學習下 Flink,計劃從整體架構到核心概念再到調優方法,最后是相關源碼的閱讀。

今天就來學習 Flink 整體架構,我們先看官網的架構圖

Flink Architecture

圖中包含三部分,分別是 Client、JobManager 和 TaskManager。其中 Client 并不屬于 Flink 集群,它主要用來把用戶編寫的程序翻譯成 StreamGraph 然后優化成 JobGraph,再將 JobGraph 提交到 Flink 集群執行。

JobManager

Flink 集群的 JobManager 是用來接收 Client 提交的任務,并且分發給 TaskManager 去執行。此外,JobManager 還有一些其他的職責,例如任務調度,協調 checkpoint 和協調從失敗中恢復。

每個 Flink 集群至少要有一個 JobManager,但在生產環境中通常是高可用模式部署,即部署多臺 JobManager,其中一臺作為 Leader,其他的作為 Standby 節點。當 Leader 掛掉時,其他的 Standby 節點會有一臺被選舉為新的 Leader 提供服務。這樣就能避免 JobManager 單機故障影響到整個 Flink 集群的可用性。

JobManager 主要由以下幾部分組成,下面我們分別來看每部分的作用。

JobManager

DataFlow Graph

JobManager 收到 JobGraph 之后,根據并行度的設置,將各個算子任務拆分成并行的子任務,最終生成 ExecutionGraph。

Checkpoint coordinator

Checkpoint 是 Flink 最核心的概念之一,Flink 的容錯機制主要靠 checkpoint 來保障。而 checkpoint 的生成會恢復則由 checkpoint coordinator 來負責。

Job Dispatch

Job Dispatch 提供了 REST 接口用于提交 Flink 任務,并為每個任務啟動一個 JobMaster。JobMaster 負責管理單個 JobGraph 的執行。

Task Scheduling

Task Scheduling 負責 Task 部署和調度,值得一提的是,JobManager 和 TaskManager 以及 Client 之間的通信都是通過一個叫 Actor System 的 RPC 系統實現的。

Resource Manager

Resource Manager 負責集群中的資源的分配回收,它管理的資源單元叫做 task slot,對于不同的部署環境,Resource Manager 有不同的實現,

Actor System

Actor System 是 Flink 集群中的一種 RPC 通信的組件,JobManager 和 TaskManager 以及 Client 之間的通信都是基于 Actor System 的。而 TaskManager 之間的數據傳遞是基于 Netty 的。

TaskManager

聊完了 JobManager,我們再來看下 TaskManager 的結構。TaskManager 主要負責執行作業的 task,并緩存和交換數據流。TaskManager 中最小的資源調度單位是 task slot,這點在前面介紹 Resource Manager 時也提到過。它表示并發處理 task 的數量。

TaskManager

Task Execution

TaskManager 在接到 JobManager 部署的任務后,就會申請相應的 task slot 去執行任務。

Data Exchange

Data Execution 主要負責 TaskManager 之間的數據交互的一些操作,這里主要關注邏輯層面,例如一些 shuffle 操作。而網絡傳輸則主要是由 Network Manager 來實現。

Memory Management

Memory Management 負責 TaskManager 的內存管理,在執行任務過程中,接收到的一些數據是需要放在內存中進行處理的。相應的內存管理操作依賴于 Memory Management 模塊。

Actor System

Actor System 我們在前面提到過,TaskManager 和 JobManager 之間的通信全靠它。

Network Manager

Network Manager 主要負責 TaskManager 之間的數據交互,它是基于 Netty 實現的。

最后多提一個 Graph 的概念,前面我們已經了解到了 JobManager 會將 JobGraph 根據并行度的配置轉換成 ExecutionGraph。在這之后,JobManager 會對作業進行調度,將 task 部署到各個 TaskManager 上,最終就形成了物理執行圖,也就是 PhysicalGraph。

這里小結一下,Flink 中四種圖的生成順序是:用戶編寫的代碼生成 StreamGraph,Client 將其進行優化,主要是將多個符合條件的節點 chain 在一起,生成了 JobGraph,然后將 JobGraph 提交到 JobManager,再由 JobManager 生成并行版本的 ExecutionGraph,待JobManager 將 task 調度后,生成的圖被稱為 PhysicalGraph。

Flink 的幾種部署模式

根據集群的生命周期、資源隔離以及 main() 方法的執行,通常將 Flink 的部署模式分為三種:Session Mode、Per-Job Mode 和 Application Mode。下面我們分別介紹這三種部署模式。

Session Mode

Session Mode 下,所有的任務共享 JobManager 和 TaskManager,JobManager 的生命周期不受提交的 Job 影響,會長期運行。

SessionMode

Per-Job Mode

Per-Job Mode 下,每個任務獨享 JobManager 和 TaskManager,資源充分隔離。JobManager 的生命周期和 Job 的生命周期綁定。

PerJobMode

Application Mode

Application Mode 下,每個 Application 對應一個 JobManager,且可以運行多個作業。客戶端無需將依賴包上傳到 JobManager,只負責提交作業,減輕了客戶端的壓力。提交作業后,JobManager 主動從 HDFS 拉取依賴包。

ApplicationMode

三種模式的對比
SessionPer-JobApplication
優點1、資源充分共享,提升資源利用率
2、作業集中管理,運維簡單
1、資源充分隔離
2、每個作業的 TM Slots 可以不同
1、有效降低帶寬和客戶端負載
2、Application 之間實現資源隔離,Application 中的資源共享
缺點1、資源隔離差
2、TM 不易擴展,伸縮性差
1、資源浪費1、僅支持 Yarn 和 Kubunetes (個人感覺夠用了)

總結

最后來總結一下,今天主要學習了 Flink 的整體架構和三種部署模式。

1、Flink 的集群架構上主要包含 JobManager 和 TaskManager,其中 JobManager 主要負責一些作業調度和資源協調的工作,TaskManager 則主要負責執行任務。

2、Flink 的部署模式分為 Session、Per-Job 和 Application 三種,Session 模式是所有 Job 共享 JobManager 和 TaskManager,Per-Job 則是作業獨享的,而 Application 模式則是在 Application 中共享 JobManager。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88867.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88867.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88867.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【LeetCode 熱題 100】105. 從前序與中序遍歷序列構造二叉樹——(解法二)O(n)

Problem: 105. 從前序與中序遍歷序列構造二叉樹 給定兩個整數數組 preorder 和 inorder ,其中 preorder 是二叉樹的先序遍歷, inorder 是同一棵樹的中序遍歷,請構造二叉樹并返回其根節點。 【LeetCode 熱題 100】105. 從前序與中序遍歷序列構…

完美卸載 Ubuntu 雙系統:從規劃到實施的完整指南

📖 前言 最近成功完成了一次 Ubuntu 雙系統的完整卸載,從最初的分區刪除到最終解決 GRUB 引導問題,整個過程雖然有些曲折,但最終完美解決。本文將詳細分享整個卸載過程,希望能幫助到有類似需求的朋友。 &#x1f3af…

深入理解oracle ADG和RAC

1. 引言 本節詳細介紹oracle ADG和RAC。當然這里講得的詳細是相對理論的深入,不涉及到實驗,比如ADG和RAC的搭建及調優等。 RAC (Real Application Clusters) 和 ADG (Active Data Guard)是Oracle 的兩大核心高可用和災備技術。它們是 Oracle 數據庫高可用…

網絡安全實踐:從環境搭建到漏洞復現

要求:1.搭建docker2.使用小皮面板搭建pikachu靶場3.使用BP的爆破模塊破解pikachu的登陸密碼步驟4.Kail的msf復現永恒之藍一.搭建docker1. Docker介紹Docker 是容器,可以部分完全封閉。封閉意味:一個物質(放到容器)&…

車載診斷架構 --- 診斷功能開發流程

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

mysql數據庫知識

MySQL數據庫詳解MySQL是目前全球最流行的關系型數據庫管理系統之一,以其開源免費、高效穩定、易于擴展等特點,被廣泛應用于Web開發、企業級應用等場景。本文將從基礎概念、核心特性到實際應用,對MySQL進行全面解析。一、MySQL的基本概念1. 關…

基于springboot的美食文化和旅游推廣系統

博主介紹:java高級開發,從事互聯網行業多年,熟悉各種主流語言,精通java、python、php、爬蟲、web開發,已經做了多年的畢業設計程序開發,開發過上千套畢業設計程序,沒有什么華麗的語言&#xff0…

Rust賦能文心大模型4.5智能開發

文心大模型4.5版本概論 文心大模型4.5是百度推出的最新一代大規模預訓練語言模型,屬于文心大模型(ERNIE)系列。該模型在自然語言處理(NLP)、多模態理解與生成等領域表現出色,廣泛應用于智能搜索、內容創作、對話交互等場景。 核心能力 語言理解與生成 支持復雜語義理解…

前端抓包(不啟動前端項目就能進行后端調試)--whistle

1、安裝 1.1.安裝node.js 1.2.安裝whistle npm install -g whistle2.安裝瀏覽器插件【SwitchyOmega】在谷歌瀏覽器應用商店下載安裝即可配置proxy127.0.0.1:8989是w2 start的端口號啟用代理3.啟動服務(每次抓包都得啟動) w2 start點擊鏈接訪問網頁 http:…

kettle從入門到精通 第102課 ETL之kettle xxl-job調度kettle的兩種方式

之前我們一起學習過xxl-job調度carte,采用的xxl-job執行器方式,不了解的可以查看《kettle從入門到精通 第六十一課 ETL之kettle 任務調度器,輕松使用xxl-job調用kettle中的job和trans 》 今天我們一起來學習下使用xxl-job直接使用http調用…

純前端 JavaScript 實現數據導出到 CSV 格式

日常開發中,數據導出到文件通常有兩種方式: 在后端處理,以文件流或者資源路徑的方式返回;后端返回數據,前端按需處理后再觸發瀏覽器的下載事件,已保存到本地文件。 這里介紹后者的一種零依賴的實現方式。…

香港理工大學實驗室定時預約

香港理工大學實驗室定時預約 文章目錄香港理工大學實驗室定時預約簡介接單價格軟件界面網站預約界面代碼對爬蟲、逆向感興趣的同學可以查看文章,一對一小班教學(系統理論和實戰教程)、提供接單兼職渠道:https://blog.csdn.net/weixin_35770067/article/d…

Spring AI 項目實戰(十七):Spring Boot + AI + 通義千問星辰航空智能機票預訂系統(附完整源碼)

系列文章 序號文章名稱1Spring AI 項目實戰(一):Spring AI 核心模塊入門2Spring AI 項目實戰(二):Spring Boot + AI + DeepSeek 深度實戰(附完整源碼)3Spring AI 項目實戰(三):Spring Boot + AI + DeepSeek 打造智能客服系統(附完整源碼)4

STM32CubeMX+CLion 使用ARM_CMSIS_DSP

安裝 參考: 【CLion開發stm32】如何使用DSP庫 - 未知的奇跡 - 博客園 實際上這樣配置會出一點小問題,現對其修改 1. 項目根目錄下新建 DSP_LIB文件夾 將目錄STM32CubeMX\Repository\STM32Cube_FW_G4_V1.6.1\Drivers\CMSIS\DSP下的Include文件夾和So…

深入解析C#接口實現的兩種核心技術:派生繼承 vs 顯式實現

—— 如何優雅解決多接口沖突問題 🔍 核心概念速覽 派生成員實現 類通過繼承基類方法隱式滿足接口實現需求 interface IIfc1 { void PrintOut(string s); }class MyBaseClass { // 基類實現方法 public void PrintOut(string s) > Console.WriteLine($"Cal…

鴻蒙項目構建配置

鴻蒙項目構建配置 參考文檔 深入鴻蒙開發之后,一般會遇到以下幾個問題。 每次編譯的時候需要手動配置不同的 versionCode 和 versionName;在使用 git 管理代碼的時候,不同的人或者不在同一臺電腦上,dev eco 這個編譯器需要經常…

os.machine()詳解

核心功能返回硬件架構 返回字符串表示系統的硬件架構,常見值包括: x86_64:64 位 x86 架構(Intel/AMD)armv7l:32 位 ARM 架構(如樹莓派 3B)aarch64:64 位 ARM 架構&#x…

linux-shell腳本

linux-shell腳本一、什么是shell腳本?二、為什么要學習shell腳本?三、腳本執行的方式3.1 bash test.sh3.2 ./test.sh3.3 source test.sh3.4 . test.sh四、變量的使用4.1 變量定義與使用4.2 避免變量混淆4.3 位置變量for循環和位置變量的結合案例4.4 read…

【嵌入式】51單片機學習筆記-Keil5軟件安裝教程

00. 目錄 文章目錄00. 目錄01. Keil C51概述02. Keil C51下載03. Keil C51安裝04. Keil C51注冊05. 附錄01. Keil C51概述 Keil C51 是德國Keil公司(現被ARM收購)開發的嵌入式開發工具,專注于8051單片機的C語言和匯編開發。它是μVision IDE…

ai之 ubuntu本地安裝mineru2.1.0

MinerU 目錄 一、更新內容概述寫在前面的話:總體來看,2.0版本升級為全新的 VLM 解析模式,更優于以前的基礎解析方式。二、MinerU 安裝部署下面使用源碼來進行環境安裝。注意:當前狀態說明推薦解決方案如果是下載插件慢可以 指定阿里源三、MinerU 使用1. 在線體驗2. 命令行使…