Flink 架構學習總結

来源:https://www.cnblogs.com/shouke/archive/2023/09/11/17692398.html
-Advertisement-
Play Games

Flink是一個分散式系統,要求有效地分配和管理計算資源以執行流式應用程式。它集成了所有常見的集群資源管理器,如Hadoop YARN和Kubernetes,但也可以設置為作為standalone甚至庫運行。 本節概述了Flink的體繫結構,並描述了其主要組件如何交互以執行應用程式以及從故障中恢復。 ...


Flink是一個分散式系統,要求有效地分配和管理計算資源以執行流式應用程式。它集成了所有常見的集群資源管理器,如Hadoop YARN和Kubernetes,但也可以設置為作為standalone甚至庫運行。

本節概述了Flink的體繫結構,並描述了其主要組件如何交互以執行應用程式以及從故障中恢復。

Flink集群解析

Flink運行時由兩種類型的進程組成:一個JobManager和一個或多個TaskManager

Client 不是運行時和程式執行的一部分,而是用於準備數據流並將其發送到JobManager。之後,Client 可以斷開連接(分離模式),或者保持連接以接收進度報告(附加模式)。Client 要麼作為觸發執行的Java/Scala程式的一部分運行,要麼在命令行進程/bin/flink run ...中運行

JobManagerTaskManager可以通過各種方式啟動:直接在機器上作為standalone啟動,在容器中啟動,或者由YARN等資源框架管理。TaskManager連接到JobManager,宣佈自己可用,並被分配工作。

JobManager

JobManager 有許多與協調Flink應用程式的分散式執行相關的職責:它決定何時安排下一個任務(或一組任務),對已完成或執行失敗的任務做出反應,協調檢查點,並協調故障恢復等。該進程由三個不同的組件組成:

  • ResourceManager

    ResourceManager 負責Flink 集群中的資源分配和供應,管理任務槽(task slots) --是Flink集群的資源調度單元。Flink為不同的環境和資源提供商(如YARN、Kubernetes和獨立部署)實現了多個ResourceManager。在standalone設置中,ResourceManager 只能分配可用TaskManager的插槽,不能獨立啟動新的TaskManager

  • Dispatcher

    Dispatcher提供了一個REST介面來提交Flink應用程式以供執行,併為每個提交的Job啟動一個新的JobMaster。同時,Dispatcher還運行Flink WebUI提供job執行信息

  • JobMaster

    JobMaster負責管理單個JobGraph的執行。一個Flink cluster中可以同時運行多個job,每個job都有自己的JobMaster

至少有一個JobManager。一個高可用性設置可能有多個JobManager,其中一個始終是leader,其他則是備用(standby)(請參閱高可用性(HA))。

TaskManager

TaskManager(也稱為worker)執行數據流任務,緩衝和交換數據流。

必須始終至少有一個TaskManagerTaskManager中資源調度的最小單位是任務槽(task slot)。任務槽的數量表示併發處理任務的數量。請註意,可能在一個任務槽中執行多個Operator

Task和運算元(Operator)鏈

對於分散式執行,Flink 將運算元的 subtasks 鏈接tasks。每個task由一個線程執行。將將operator鏈接成task是一種有用的優化:它減少了線程切換和緩衝的開銷,併在降低延遲的同時提高了整體吞吐量。可以配置鏈接行為;請參閱chaining docs查看詳細信息。

下圖中的示例數據流由五個Subtask執行,因此由五個並行線程執行

Task Slot(任務槽)和資源

每個worker(TaskManager)都是一個JVM進程,可以在單獨的線程中執行一個或多個子任務。為了控制單個TaskManager接受的任務數,就有了所謂的task slot(至少一個)。

每個 task slot 表示TaskManager的固定資源子集。例如,具有三個slotTaskManager會將其托管記憶體的1/3專用於每個插槽。劃分資源意味著subtask不會與其他作業的subtask爭奪托管記憶體,而是有一定數量的保留托管記憶體。請註意,這裡沒有進行CPU隔離;當前slot僅隔離任務的托管記憶體。

通過調整task slot 的數量,用戶可以定義如何將subtask彼此隔離。每個TaskManager有一個slot 意味著每個任務組都在一個單獨的JVM中運行(例如,可以在一個獨立的容器中啟動)。擁有多個slot 意味著更多的subtask共用同一JVM。同一JVM中的任務共用TCP連接(通過多路復用)和心跳消息。它們還可以共用數據集和數據結構,從而減少每個任務的開銷。

預設情況下,Flink允許subtask共用slot ,即使它們是不同tasksubtask ,只要來自同一job即可。結果就是,一個slot可以容納job的整個管道。允許這種“slot共用”有兩個主要好處:

  • Flink集群所需task slotjob使用的最大並行度保持一樣。不需要計算一個程式總共包含多少任務(具有不同的並行度)。
  • 更容易獲得更好的資源利用率。如果沒有“slot共用”,非密集型subtask(source/map()) 將阻塞與資源密集型 subtask(window)一樣多的資源。通過“slot共用”,將示例中的基本並行度從兩個增加到六個,可以充分利用slot資源,同時確保繁重的subtaskTaskManager之間公平分配。
  • 集群生命周期: Flink應用集群是一個專用的Flink集群,它只執行來自一個Flink應用的job,並且 main() 方法在集群上運行,而不是在client運行。job提交是一個一步到位的過程: 你不需要先啟動Flink集群,然後向現有集群會話提交job ,相反,你將應用程式邏輯和依賴項打包到一個可執行的作業JAR包中,集群入口點(ApplicationClusterEntryPoint) 負責調用main() 方法來提取JobGraph。這允許你像Kubernetes上的任何其他應用程式一樣部署Flink應用程式。Flink應用程式集群的生命周期因此與Flink應用的生命周期綁定。
  • 資源隔離: 在Flink應用集群中,ResourceManagerDispatcher的作用域為一個Flink應用,它提供了比Flink會話集群更好的隔離。
  • 集群生命周期: 在Flink會話集群中,客戶端連接到一個預先存在的、長期運行的集群,該集群可以接受多個job提交。即使在所有job完成後,集群(和JobManager) 仍將繼續運行,直到手動停止會話。因此,Flink會話集群的生存期不與任何Flink job的生存期綁定。
  • 資源隔離: TaskManager slotResourceManager在提交job時分配,併在job完成後釋放。因為所有作業都共用同一個集群,所以在提交job階段存在一些集群資源競爭,比如網路帶寬。這種共用設置的一個限制是,如果一個TaskManager崩潰,那麼所有在該TaskManager上運行任務的job都將失敗;類似的,如果JobManager上發生一些致命錯誤,它將影響集群中運行的所有job
  • 其他註意事項: 擁有預先存在的集群可以節省大量申請資源和啟動TaskManager的時間。在job的執行時間非常短,且啟動時間過長會對端到端用戶體驗產生負面影響的情況下,這一點很重要——短查詢的互動式分析就是這樣,希望job可以使用現有資源快速執行計算。

以前,Flink會話集群也稱為session mode下的Flink集群。

參考鏈接

https://nightlies.apache.org/flink/flink-docs-master/docs/concepts/flink-architecture/

作者:授客
微信/QQ:1033553122
全國軟體測試QQ交流群:7156436

Git地址:https://gitee.com/ishouke
友情提示:限於時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額隨意,您的支持將是我繼續創作的源動力,打賞後如有任何疑問,請聯繫我!!!
           微信打賞                        支付寶打賞                  全國軟體測試交流QQ群  
              


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 方案 markdown+Typora + picGo + jsdelivr + github倉庫 + bloghelper Typora: 本地 Markdown 編輯器,用於本地編寫文檔 PicGo:一個用於快速上傳圖片並獲取圖片 URL 鏈接的工具,可以與 Typora 集成,實現黏貼圖片後自動 ...
  • 本文介紹在Anaconda環境下,創建、使用與刪除Python虛擬環境的方法。 在Python的使用過程中,我們常常由於不同Python版本以及不同第三方庫版本的支持情況與相互之間的衝突情況,而需要創建不同的Python虛擬環境;在Anaconda的幫助下,這一步驟就變得十分方便。 首先,我們需要打 ...
  • LeetCode的hard題都很難嗎?不一定,297就非常簡單,隨本文一起,用最基礎的知識寫代碼,執行用時能擊敗98.46%,與此同時,記憶體消耗擊敗99.73% ...
  • 淺聊一下SpringMVC的核心組件以及通過源碼瞭解其執行流程 MVC作為WEB項目開發的核心環節,正如三個單詞的分解那樣,Controller(控制器)將View(視圖、用戶客戶端)與Model(javaBean:封裝數據)分開構成了MVC,今天我們淺聊一下SpringMVC的相關組件以及通過源碼... ...
  • 下麵的系列文章記錄瞭如何使用一塊linux開發扳和一塊OLED屏幕實現視頻的播放: 項目介紹 為OLED屏幕開發I2C驅動 使用cuda編程加速視頻處理 這篇文章主要對項目的實現做整體的介紹, 包括硬體的需求, 最終實現的視頻播放效果, 以及軟體的實現思路. 1). 硬體需求 beaglebone ...
  • 對於有科班背景的讀者,可以跳過本系列文章。這些文章的主要目的是通過簡單易懂的彙總,幫助非科班出身的讀者理解底層知識,進一步瞭解為什麼在面試中會涉及這些底層問題。否則,某些概念將始終無法理解。這些電腦基礎文章將為你打通知識的任督二脈,祝你在編程領域中取得成功! ...
  • 下麵的系列文章記錄瞭如何使用一塊linux開發扳和一塊OLED屏幕實現視頻的播放: 項目介紹 為OLED屏幕開發I2C驅動 使用cuda編程加速視頻處理 這是此系列文章的第2篇, 主要總結和記錄一個I2C從設備的驅動, 在linux內核中如何實現, 如何給用戶態的程式暴露合適的介面, 讓用戶態有機會 ...
  • 1. 除非遇到異常情況,否則不需要調整配置 1.1. 不要“調優”伺服器,不要使用比率、公式或“調優腳本”作為設置配置變數的基礎 1.1.1. 在互聯網上搜索配置建議並不總是一個好主意,你會在博客、論壇等找到很多糟糕的建議 1.1.2. 很難判斷誰是真正的專家 1.1.3. 不要相信流行的記憶體消耗公 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...