Flink模式

来源:https://www.cnblogs.com/yl555/archive/2023/03/12/17209775.html
-Advertisement-
Play Games

事務 事務:是一組操作的集合,是一個不可分割的工作單位,事務會把所有操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要麼同時成功,要麼同時失敗(當操作中某一步出現異常時,前面已執行的步驟也會失效)。 感覺有點像是函數。 預設MySQL的事務是自動提交的,當執行一條DML語句,MySQL會立即 ...


Per-job Cluster

該模式下,一個作業一個集群,作業之間相互隔離。

在Per-Job模式下,集群管理器框架用於為每個提交的Job啟動一個 Flink 集群。Job完成後,集群將關閉,所有殘留的資源也將被清除。

此模式可以更好地隔離資源,因為行為異常的Job不會影響任何其他Job。另外,由於每個應用程式都有其自己的JobManager,因此它將記錄的負載分散到多個實體中。

場景:Per-Job模式適合長期運行的Job,這些Job可以接受啟動延遲的增加以支持彈性。

資源管理器支持:Yarn

Application

與per-job 模式相比,在Application 模式下,main() 方法在集群上而不是在客戶端執行。

場景:任務啟動較慢,適合於長時間運行的大型任務。

資源管理器支持:Yarn、Native kubernetes

Session

該模式下,作業共用集群資源。Session 模式提交的應用都在該集群里執行,會導致資源的競爭。

該模式優勢是無需為每一個提交的任務花費精力去分解集群。但是,如果Job異常或是TaskManager 宕掉,那麼該TaskManager運行的其他Job都會失敗。除了影響到任務,也意味著潛在需要更多的恢復操作,重啟所有的Job,會併發訪問文件系統,會導致該文件系統對其他服務不可用。此外,單集群運行多個Job,意味著JobManager更大的負載。

場景:該模式適合於對啟動延遲要求較高且運行時間較短的作業,例如互動式查詢。任務提交速度快,適合頻繁提交運行的短時間任務。

資源管理器支持:Standalone、Yarn、Native kubernetes

Standalone

Standalone模式需要在任務啟動時就確定TaskManager的數量,不能像Yarn一樣,可以在任務啟動時申請動態資源。

很多時候任務需要多少個TaskManager事先並不知道,TaskManager設置少了,任務可能跑不起來,多了又會造成資源浪費,需要在任務啟動時才能確定需要多少個TaskMananger。

Standalone Application kubernetes

需要先將用戶代碼都打到鏡像裡面,然後根據該鏡像來部署一個flink集群運行用戶代碼。

每提交一個任務,單獨啟動一個集群運行該任務,運行結束集群被刪除,資源也被釋放。

Standalone Session kubernetes

在Session模式下,先啟動一個Flink集群,然後向該集群提交任務,所有任務共用JobManager。

Native kubernetes

Flink 的 Client 內置了一個 K8s Client,可以藉助 K8s Client 去創建 JobManager,當 Job 提交之後,如果對資源有需求,JobManager 會向 Flink 自己的 ResourceManager 去申請資源。這個時候 Flink 的 ResourceManager 會直接跟 K8s 的 API Server 通信,將這些請求資源直接下發給 K8s Cluster,告訴它需要多少個 TaskManger,每個 TaskManager 多大。當任務運行完之後,它也會告訴 K8s Cluster 釋放沒有使用的資源。相當於 Flink 用很原生的方式瞭解到 K8s Cluster 的存在,並知曉何時申請資源,何時釋放資源。

Native Kubernetes Application

native kubernetes下,application模式相當於提交任務時調k8s api自動拉起一個flink集群跑該應用,然後跑完就刪除集群。

這種模式比較適合對啟動時間不敏感、且長時間運行的作業。不適合對任務啟動時間比較敏感的場景。

優點:隔離性比較好,任務之間資源不衝突,一個任務單獨使用一個 Flink 集群;相對於 Flink session 集群而且,資源隨用隨建,任務執行完成後立刻銷毀資源,資源利用率會高一些。

缺點:需要提前指定 TaskManager 的數量,如果 TaskManager 指定的少了會導致作業運行失敗,指定的多了仍會降低資源利用率;資源是實時創建的,用戶的作業在被運行前,需要先等待以下過程。

flink on native kubernetes application模式:提交任務示例
./bin/flink run-application --target kubernetes-application
-Dkubernetes.namespace=flink-native-kubernetes
-Dkubernetes.cluster-id=flink-application-cluster
-Dkubernetes.jobmanager.service-account=flink
-Dkubernetes.container.image=flink:1.14.2
-Dkubernetes.rest-service.exposed.type=NodePort
-Djobmanager.heap.size=1024m
-Dkubernetes.jobmanager.cpu=1
-Dkubernetes.taskmanager.cpu=2
-Dtaskmanager.memory.process.size=1024m
-Dtaskmanager.numberOfTaskSlots=2
local:///opt/flink/examples/batch/WordCount.jar
應用鏡像構建方式:
`FROM flink:1.14.2
 RUN mkdir -p $FLINK_HOME/usrlib
 COPY my-flink-job.jar $FLINK_HOME/usrlib/my-flink-job.jar`

Native Kubernetes Session

native kubernetes下,session模式是提前調k8s api啟動一個常駐的flink集群,然後客戶端提交任務時,調k8s api自動起一個taskmanager pod 運行任務,然後等任務運行完之後,這個taskmanager的任務pod會被銷毀。

flink on native kubernetes session模式:

1、kubectl create namespace flink-session-cluster

2、kubectl create serviceaccount flink -n flink-session-cluster

3、kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flink-session-cluster:flink

啟動session集群:
4、./bin/kubernetes-session.sh \
 -Dkubernetes.namespace=flink-session-cluster \
-Dkubernetes.jobmanager.service-account=flink \
 -Dkubernetes.cluster-id=flink-session-cluster \
 -Dkubernetes.rest-service.exposed.type=NodePort  \
-Dkubernetes.container.image=flink:1.14.2

flink on native kubernetes session模式:提交任務示例
./bin/flink run -d --target kubernetes-session  \
-Dkubernetes.namespace=flink-session-cluster  \
-Dkubernetes.cluster-id=flink-session-cluster \
 -Dkubernetes.jobmanager.service-account=flink \
-Dkubernetes.rest-service.exposed.type=NodePort \
/opt/flink-1.14.2/examples/batch/WordCount.jar

總結

Flink on K8s :

優點:

Flink 在 K8s 上最簡單的方式是以 Standalone 方式進行部署。這種方式部署的好處在於不需要對 Flink 做任何改動,同時 Flink 對 K8s 集群是無感知的,通過外部手段即可讓 Flink 運行起來。

缺點:

  • 無論 Operator、Helm Chart 或者是直接使用 Kubectl Yaml 的方式,Flink 都感知不到 K8s 的存在。
  • 目前主要使用靜態的資源分配。需要提前確認好需要多少個 TaskManager,如果 Job 的併發需要做一些調整,TaskManager 的資源情況必須相應的跟上,否則任務無法正常執行。
  • 用戶需要對一些 Container、Operator 或者 K8s 有一些最基本的認識,這樣才能保證順利將 Flink 運行到 K8s 之上。
  • 對於批處理任務,或者想在一個 Session 里提交多個任務不太友好。無法實時申請資源和釋放資源。因為 TaskManager 的資源是固定的,批處理任務可能會分多個階段去運行,需要去實時地申請資源、釋放資源,當前也無法實現。如果需要在一個 Session 里跑多個 Job 並且陸續運行結束當前也無法實現。
  • 如果維持一個比較大的 Session Cluster,可能會資源浪費。但如果維持的 Session Cluster 比較小,可能會導致 Job 跑得慢或者是跑不起來。

基於這幾點,社區推進了一個 Native 的集成方案。讓Flink 原生的感知到下層 Cluster 的存在。Native 是相對於 Flink 而言的,藉助 Flink 的命令就可以達到自治的一個狀態,不需要引入外部工具就可以通過 Flink 完成任務在 K8s 上的運行。

生產環境上推薦:

Flink on YARN(pre-job、application)、Flink on Native Kubernetes Appliation;

問題

Flink on Kubernetes 需考慮的問題:

日誌問題

日誌需要通過k8s的pod日誌排查。如果出現節點宕機,pod飄移到別的節點,日誌獲取困難。

應用jar包問題

flink on k8s的application模式需要將jar包以及依賴放在鏡像里啟動。

應用依賴問題

有依賴的任務,無法通過客戶端獲取信息。k8s不支持pre-job模式。


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

-Advertisement-
Play Games
更多相關文章
  • 上篇文章我們介紹了 VUE+.NET應用系統的國際化-整體設計思路 系統國際化改造整體設計思路如下: 提供一個工具,識別前後端代碼中的中文,形成多語言詞條,按語言、界面、模塊統一管理多有的多語言詞條 提供一個翻譯服務,批量翻譯多語言詞條 提供一個詞條服務,支持後端代碼在運行時根據用戶登錄的語言,動態 ...
  • 前言 之前寫過一篇基於ML.NET的手部關鍵點分類的博客,可以根據圖片進行手部的提取分類,於是我就將手勢分類和攝像頭數據結合,集成到了我開發的電子腦殼軟體里。 電子腦殼是一個為稚暉君開源的桌面機器人ElectronBot提供一些軟體功能的桌面程式項目。它是由綠蔭阿廣也就是我開發的,使用了微軟的WAS ...
  • 在 WebAssembly 中使用 Rust 編寫 eBPF 程式併發布 OCI 鏡像 作者:於桐,鄭昱笙 eBPF(extended Berkeley Packet Filter)是一種高性能的內核虛擬機,可以運行在內核空間中,以收集系統和網路信息。隨著電腦技術的不斷發展,eBPF 的功能日益強 ...
  • 一般來說,有時為了方便會直接在Ubuntu終端登陸root賬戶獲取許可權 在root下打開vscode會提示無法打開。 環境:Ubuntu22.04 解決辦法: 終端輸入: vi ~/.bashrc 添加一行: alias code='/usr/share/code/code . --no-sandb ...
  • apt-get update更新時出現錯誤,提示Release文件已經過期,無論是使用kali官方源還是阿裡源、中科大源都報該錯誤。 網上查找相關資料,簽名出錯需要下載數字簽名,方案如下: wget archive.kali.org/archive-key.asc //下載簽名 apt-key ad ...
  • 痞子衡嵌入式半月刊: 第 73 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • 經常用老毛桃裝系統,也裝過很多次Ubuntu+windows雙系統,但是對系統啟動的原理卻一直沒搞清楚。 這次就遇到了棘手的問題:裝完Ubuntu之後,開機的引導選項里沒有windows boot manager,直接就進了Ubuntu。 復盤一下安裝過程 (1)我是雙固態,一個裝了win10,另一 ...
  • 本文主要介紹博主在以往開發過程中,對於不同業務所對應的 sql 寫法進行歸納總結而來。進而分享給大家。 本文所講述 sql 語法都是基於 MySql 8.0 博主github地址:http://github.com/wayn111 歡迎大家關註,點個star 一、ORDER BY FIELD() 自 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...