Flink的狀態管理

一、狀態的概念

Flink的狀態其實你就可以將其想象為中間結果就可以了。在Flink中,算子的任務可以分為無狀態和有狀態兩種情況。

無狀態算子任務在計算過程中是不依賴于其他數據的,只根據當前的輸入數據就可以得到結果輸出。比如之前講到的Map、FlatMap、Filter算子等。

有狀態算子任務,在計算的過程中需要依賴一些其他的數據,然后再結合當前的輸入數據得到最終的執行結果。比如聚合算子、窗口算子都是有狀態的算子。

有狀態算子的一般處理流程是:

? ? ? ? (1)、算子任務接收上游輸入的數據;

? ? ? ? (2)、獲取當前的狀態信息;

? ? ? ? (3)、根據業務邏輯進行處理并更新狀態信息;

二、狀態的分類

Flink總體來說有兩種分類狀態:托管狀態、原始狀態。

托管狀態就是由Flink來進行狀態的統一管理。狀態的存儲訪問、故障恢復和重組等一系列問題都由Flink來實現,開發者只用去調接口就可以了;原始狀態是自定義的,相當于就是自己開辟一塊內存,然后由開發者自己來管理狀態信息,自己實現狀態的序列化和故障恢復。

但是大部分情況下,我們都是使用的托管狀態,就是由Flink來管理狀態信息。

那在托管狀態下其實又把狀態分成了兩類,分別是算子狀態(Operator State)和按鍵分區狀態(Keyed State)。

這兩種狀態的區別很簡單,就是看狀態的獲取是否要按照Key來獲取,不同的Key之間不能獲取到同一個狀態的。下面的這個就是算子狀態的示意圖。在這個圖中,流入同一個子任務的數據共享同一個狀態。

下面是按鍵分區狀態的示意圖,就能看到雖然數據會發往同一個子任務中,但是在這個子任務中依然會按照Key值來獲取不同的狀態信息。

三、狀態的生存時間

在實際的應用中,狀態會隨著時間的推移而漸漸增多,如果不對其加以限制,狀態就會把存儲空間耗盡。開始的優化思路是直接在代碼中調用.clear()方法去清除狀態,但是有的時候我們的邏輯不希望將狀態直接給清除掉,這時就需要配置一個狀態的“生存時間”(time-to-live,TTL)。也就是說,超出這一時間之后狀態才會被清除。那這里又出現了一個問題,就是我們需要怎么去監測這個狀態信息的生存時間到了呢?如果用一個進程不停地掃描所有的狀態看是否過期,這樣會消耗大量的資源在做這種無用功。所有我們給狀態加了一個屬性,也就是狀態的“失效時間”。狀態創建時,設置失效時間=當前時間+TTL;之后如果有對狀態的訪問和修改,我們再對失效時間進行更新;當需要拿數據進行操作的時候或者每隔一段時間掃描檢查狀態是否失效的操作要執行時,就可以判斷狀態是否失效,從而確定是否需要將狀態清除。

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

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

相關文章

GoLand 項目從 0 到 1:第八天 ——GORM 命名策略陷阱與 Go 項目啟動慢問題攻堅

第八天核心任務:解決開發中的兩大技術卡點今天的開發不僅聚焦于代碼層面的數據庫字段映射問題,還遭遇了一個困擾團隊許久的環境難題 ——Go 項目啟動異常緩慢。經過多維度排查,我們不僅理清了 GORM 命名策略的設計邏輯,還找到了影…

在Ubuntu上安裝Google Chrome的詳細教程

步驟 1:下載 Google Chrome 安裝包 打開瀏覽器輸入https://www.google.cn/chrome/,然后進入Chrome瀏覽器官方網站 點擊下載選擇Debian/Ubuntu版本 google-chrome-stable_current_amd64.deb步驟 2:安裝下載的.deb 包 sudo dpkg -i google-chro…

el-table合并相同名稱的行

el-table合并相同名稱的行 <template><el-table:data"tableData":span-method"objectSpanMethod"border><el-table-columnprop"name"label"名稱"width"180"></el-table-column><el-table-column…

解決 VSCode 無法從右鍵菜單“通過 Code 打開”文件夾的問題

&#x1f9e9; 一、問題現象 VSCode 已安裝&#xff0c;但右鍵文件夾/桌面空白處無“通過 Code 打開在 VSCode 中執行 Shell Command: Install ‘Open with Code’ 無反應手動添加后菜單顯示亂碼&#xff08;如 €?? Code ‰“€&#xff09;點擊右鍵菜單無響應或提示“找不到…

服務器數據恢復—服務器硬盤狀態燈變紅,分區數據恢復過程

服務器數據恢復環境&故障&#xff1a; 某公司服務器上有一組由3塊硬盤組建的raid5磁盤陣列。 服務器上1塊硬盤的狀態燈變為紅色&#xff0c;磁盤陣列出現故障&#xff0c;分區無法識別。服務器數據恢復過程&#xff1a; 1、將故障服務器上所有磁盤編號后取出。經過初檢&…

MySQL → SQL → DDL → 表操作 → 數據類型 知識鏈整理成一份系統的內容

1. 知識結構MySQL└── SQL&#xff08;結構化查詢語言&#xff09;├── DDL&#xff08;數據定義語言&#xff09; → 定義結構│ ├── 表操作&#xff08;創建/修改/刪除表&#xff09;│ └── 數據類型&#xff08;列字段類型定義&#xff09;├── DML&…

基于 gRPC 的接口設計、性能優化與生產實踐

gRPC 是一種高性能、跨語言的遠程過程調用&#xff08;RPC&#xff09;框架&#xff0c;由 Google 開發&#xff0c;基于 HTTP/2 協議和 Protocol Buffers&#xff08;Protobuf&#xff09;序列化機制&#xff0c;廣泛應用于微服務架構和分布式系統中。本文將深入解析 gRPC 的底…

如何回答研究過MQ的源碼嗎

?一、核心回答框架&#xff08;由淺入深&#xff09;??1?? ?明確研究對象和深度?“我主要研究過 ??[具體MQ名稱&#xff0c;如RocketMQ/Kafka/RabbitMQ]?? 的核心模塊源碼&#xff0c;重點關注 ??[選1-2個核心方向]?? &#xff0c;比如存儲機制、網絡通信或事務…

20250815給ubuntu22.04.5的系統縮小/home分區

20250815給ubuntu22.04.5的系統縮小/home分區 2025/8/15 9:42緣起&#xff0c;聯想IdeaPad筆記本電腦&#xff0c;換了4TB的SSD固態硬盤。 WIN10和ubuntu22.04.5的雙系統。 WIN10系統&#xff1a; C盤 500GB&#xff1f; D盤 500GB&#xff1f;ubuntu22.04.5 /home分區大概 2.7…

Windows 11 首次開機引導(OOBE 階段)跳過登錄微軟賬戶,創建本地賬戶

今天重裝WIN11系統后&#xff0c;發現在首次開機引導&#xff08;OOBE 階段&#xff09;中&#xff0c;微軟默認強制聯網并登錄微軟賬戶&#xff0c;沒有的讓你注冊什么的就很煩。通過下面方法可以跳過登錄微軟賬戶&#xff0c;直接創建本地賬戶。? 方法一&#xff1a;斷網&am…

IDE:vscode的vue3模板

快捷鍵打開配置選項&#xff1a;ctrl shift p選擇配置文件&#xff1a;Snippet: Configure Snippets{// Place your snippets for vue here. Each snippet is defined under a snippet name and has a prefix, body and // description. The prefix is what is used to trigg…

C++_390_透傳功能中,使用單例模式,管理session透傳會話的生命周期,為每個會話記錄報警讀取狀態,監控會話心跳狀態,后臺線程自動清理超時會話

問題:對接板端,cvms lite 通道管理頁面,無法添加和刪除多目通道 審核:XXX 根因分析:多通道的刪除和添加需要通過eventcheck上告實現,cvms lite云走的透傳沒有eventcheck 解決辦法:云透傳加上eventcheck上告 footer: Closes: #BUG2025052701632 我幫你分兩部分解析:先解…

MIPI-csi調試

調試流程1. 硬件連線檢查數據線&#xff08;MIPI Data Lanes&#xff09; &#xff1a;確認 IMX415 模組的 4 條數據線 1 條時鐘線連接正確。如果是 4-lane 輸出&#xff0c;SoC 的 D-PHY 必須也配置成 4-lane 接收。控制線&#xff1a;原理圖IC SDA/SCL → &i2c8 控制器管…

Mysql——》提取JSON對象和數組

推薦鏈接&#xff1a; 總結——》【Java】 總結——》【Mysql】 總結——》【Redis】 總結——》【Kafka】 總結——》【Spring】 總結——》【SpringBoot】 總結——》【MyBatis、MyBatis-Plus】 總結——》【Linux】 總結——》【MongoD…

JSON值包含引號

目錄背景代碼正則說明背景 很多時候&#xff0c;在無法使用Gson等能處理非標準化JSON的工具時&#xff0c;需要對JSON值中的JSON限定符進行轉義&#xff0c;使用正則比較方便&#xff0c;以對JSON值中的引號做轉義為例 代碼 private static String escapeUnescapedQuotes(St…

後端開發Python篇

書接上回&#xff1a;後端開發技術教學(五) 魔術方法、類、序列化-CSDN博客 必要資源&#xff1a; trae中下載網址: TRAE - The Real AI Engineer phpStudy 2018 : phpStudy - Windows 一鍵部署 PHP 開發環境 小皮出品 python解釋器&#xff1a;Welcome to Python.org 前言…

Python匿名函數的具體用法

引言 在Python編程中&#xff0c;匿名函數&#xff08;即lambda函數&#xff09;是一種簡潔定義小型函數的方式。它無需通過def關鍵字命名&#xff0c;適用于需要臨時函數或作為高階函數參數的場景。本文將詳細解析lambda函數的語法、應用場景及最佳實踐。 定義與語法 官方定義…

ARM芯片架構之CoreSight SoC-400 組件介紹

CoreSight SoC-400 組件介紹1. Debug Access Port (DAP) 功能&#xff1a;DAP 是外部調試器與 SoC 內部調試基礎設施的接口核心。它將調試端口&#xff08;JTAG-DP 或 SW-DP&#xff09;與多個訪問端口&#xff08;AP&#xff09;連接起來&#xff0c;使調試器能夠訪問內存、外…

SynAdapt:通過合成連續思維鏈實現大語言模型的自適應推理

摘要&#xff1a;盡管鏈式思維&#xff08;CoT&#xff09;推理能提升模型性能&#xff0c;卻因離散 CoT 標記&#xff08;DCoT&#xff09;的生成而帶來顯著時間開銷。連續 CoT&#xff08;CCoT&#xff09;是更高效的替代方案&#xff0c;但現有方法受限于間接微調、對齊不足…

計算機畢設不知道選什么題目?基于Spark的糖尿病數據分析系統【Hadoop+Spark+python】

精彩專欄推薦訂閱&#xff1a;在 下方專欄&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主頁&#xff1a;計算機畢設木哥&#x1f525; &#x1f496; 文章目錄 一、項目介紹選…