Flink狀態和狀態管理

1.什么是狀態

官方定義:當前計算流程需要依賴到之前計算的結果,那么之前計算的結果就是狀態。

這句話還是挺好理解的,狀態不只存在于Flink,也存在生活的方方面面,比如看到一個認識的人,如何識別認識呢?就是眼睛看到這個人的樣子,再和大腦記憶中的人做對比,就知道認識這個人,其中大腦記憶中的人就是存儲在狀態中。

狀態又分為無狀態和有狀態。

  • 無狀態:例如消費延遲計算,單條輸入包含所有的信息,不依賴于歷史消息。在這種模式的計算中,無論這條輸入進來多少次,輸出的結果都是一樣的,因為單條輸入中已經包含了所需的所有信息。消費落后等于生產者減去消費者。生產者的消費在單條數據中可以得到,消費者的數據也可以在單條數據中得到,所以相同輸入可以得到相同輸出,這就是一個無狀態的計算。
  • 有狀態:例如訪問量統計,單條輸入僅包含部分信息,依賴歷史消息。這種模式是將數據輸入算子中,用來進行各種復雜的計算并輸出數據。這個過程中算子會去訪問之前存儲在里面的狀態。另外一方面,它還會把現在的數據對狀態的影響實時更新,如果輸入100 條數據,最后輸出就是 100 條結果。

2.狀態應用場景

通常以下4種場景會用到狀態:

  • 去重:比如上游的系統數據可能會有重復,落到下游系統時希望把重復的數據都去掉。去重需要先了解哪些數據來過,哪些數據還沒有來,也就是把所有的主鍵都記錄下來,當一條數據到來后,能夠看到在主鍵當中是否存在。
  • 窗口計算:比如統計每分鐘 Nginx 日志 API 被訪問了多少次。窗口是一分鐘計算一次,在窗口觸發前,如 08:00 ~ 08:01 這個窗口,前59秒的數據來了需要先放入內存,即需要把這個窗口之內的數據先保留下來,等到 8:01 時一分鐘后,再將整個窗口內觸發的數據輸出。未觸發的窗口數據也是一種狀態。
  • 機器學習/深度學習:如訓練的模型以及當前模型的參數也是一種狀態,機器學習可能每次都用有一個數據集,需要在數據集上進行學習,對模型進行一個反饋。
  • 訪問歷史數據:比如與昨天的數據進行對比,需要訪問一些歷史數據。如果每次從外部去讀,對資源的消耗可能比較大,所以也希望把這些歷史數據也放入狀態中做對比。

3.狀態管理

實時計算中的狀態的功能主要體現在任務可以做到失敗重啟后沒有數據質量、時效問題。

  • 數據質量問題:當實時任務掛掉后,從消息失敗offset位置開始消費,數據就錯誤。
  • 數據時效問題:實時任務要求有時效性,當從源offset開始位置運行時,需要好幾個小時才能追上當前offset。時效性就很差。

針對以上問題,就引出了狀態管理。

當我們把數據定期(例如每隔10min)的給存儲到 HDFS 上面時,任務掛了、恢復之后。我們的任務還可以從 HDFS 上面把這個數據給讀回來,接著從最新的一個 Kafka Offset 繼續計算就可以,這樣既沒沒有數據質量問題,也沒有數據時效性問題。

因此,實時計算中提到的狀態的概念重點不止在于狀態本身,更重要的在于強調 "管理" 狀態。

基于上述,狀態管理對流式作業的要求總結如下:

  • 7*24小時運行,高可靠;
  • 數據不丟不重,恰好計算一次;
  • 數據實時產出,不延遲;

但是基于以上要求,內存的管理就會出現一些問題。由于內存的容量是有限制的。如果要做 24 小時的窗口計算,將 24 小時的數據都放到內存,可能會出現內存不足;另外,作業是 7*24,需要保障高可用,機器若出現故障或者宕機,需要考慮如何備份及從備份中去恢復,保證運行的作業不受影響;此外,考慮橫向擴展,假如網站的訪問量不高,統計每個 API 訪問次數的程序可以用單線程去運行,但如果網站訪問量突然增加,單節點無法處理全部訪問數據,此時需要增加幾個節點進行橫向擴展,這時數據的狀態如何平均分配到新增加的節點也問題之一。因此,將數據都放到內存中,并不是最合適的一種狀態管理方式。

最理想的狀態管理需要滿足易用、高效、可靠三點需求:

  • 易用,Flink 提供了豐富的數據結構、多樣的狀態組織形式以及簡潔的擴展接口,讓狀態管理更加易用;
  • 高效,實時作業一般需要更低的延遲,一旦出現故障,恢復速度也需要更快;當處理能力不夠時,可以橫向擴展,同時在處理備份時,不影響作業本身處理性能;
  • 可靠,Flink 提供了狀態持久化,包括不丟不重的語義以及具備自動的容錯能力,比如 HA,當節點掛掉后會自動拉起,不需要人工介入。

4.狀態后端

做狀態數據(持久化,restore)的工具就叫做狀態后端。比如在 Flink 中見到的 RocksDB、FileSystem 的概念就是指狀態后端。這些狀態后端就是實際存儲上面的狀態數據的。比如配置了 RocksDB 作為狀態后端,MapState 的數據就會存儲在 RocksDB 中。

總的來說可以這么理解:應用中有一份狀態數據,把這份狀態數據存儲到 MySQL 中,這個 MySQL 就能叫做狀態后端。

5.Checkpoint和Savepoint

概念:協調整個任務 when,how 去將 Flink 任務本地機器中存儲在狀態后端的狀態去同步到遠程文件存儲系統(比如 HDFS)的過程就叫 Checkpoint、Savepoint。

Flink 狀態保存主要依靠 Checkpoint 機制,Checkpoint 會定時制作分布式快照,對程序中的狀態進行備份。分布式快照 Checkpoint 完成后,當作業發生故障了如何去恢復?假如作業分布跑在 3 臺機器上,其中一臺掛了。這個時候需要把進程或者線程移到 active 的 2 臺機器上,此時還需要將整個作業的所有 Task 都回滾到最后一次成功 Checkpoint 中的狀態,然后從該點開始繼續處理。

Checkpoint流程如下:

  1. JM 定時調度 Checkpoint 的觸發:JM CheckpointCoorinator 定時觸發,CheckpointCoordinator 會去通過 RPC 接口調用 Source 算子的 TM 的 StreamTask 告訴 TM 可以開始執行 Checkpoint 了。
  2. Source 算子:接受到 JM 做 Checkpoint 的請求后,開始做本地 Checkpoint,本地執行完成之后,發 barrier 給下游算子。barrier 發送策略是隨著 partition 策略走,將 barrier 發往連接到的所有下游算子(舉例:keyby 就是廣播,forward 就是直接送)。
  3. 剩余的算子:接收到上游所有 barrier 之后進行觸發 Checkpoint。當一個算子接收到上游一個 channel 的 barrier 之后,就停止處理這個 input channel 來的數據(本質上就是不會再去影響狀態了)

Savepoint 與 Checkpoint 類似,同樣是把狀態存儲到外部介質。當作業失敗時,可以從外部恢復。主要區別如下:

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

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

相關文章

神經網絡基礎-神經網絡補充概念-24-隨機初始化

由來 在神經網絡的訓練過程中,權重和偏差的初始值對模型的性能和訓練過程的收斂速度都有影響。隨機初始化是一種常用的權重和偏差初始值設置方法,它有助于打破對稱性,避免網絡陷入局部最優解。 概念 當所有權重和偏差都被設置為相同的初始…

Python Web框架:Django、Flask和FastAPI巔峰對決

今天,我們將深入探討Python Web框架的三巨頭:Django、Flask和FastAPI。無論你是Python小白還是老司機,本文都會為你解惑,帶你領略這三者的魅力。廢話不多說,讓我們開始這場終極對比! Django:百…

web基礎入門和php語言基礎入門 二

web基礎入門和php語言基礎入門 二 MySQL入門-續MySQL之數據查詢操作MySQL其他知識點 php語言基礎入門認識PHPPHP的工作流程安裝PHP環境認識一個PHP程序PHP基礎知識點進入正題 PHP與WEB交互PHP與MySQL交互總結 MySQL入門-續 MySQL之數據查詢操作 WHERE 子句,條件限…

# 快速評估立功科技基于S32K324的TMS方案

文章目錄 1.前言2.立功科技的TMS方案介紹2.1 介紹資料2.2 簡要介紹 3.S32K3_TriMotor評估板測試3.1 環境搭建S32 Design Studio for S32 Platform 3.4安裝RTD 2.0.0安裝Freemaster 3.2 3.2 例程測試3.3 例程適配3.4 雙核燒錄3.5 測試 1.前言 最近和一些做汽車水泵/風機的客戶交…

算法概述-Java常用算法

算法概述-Java常用算法 1、算法概念2、算法相關概念3、算法的性能評價4、算法應用歸納 1、算法概念 廣泛算法定義:算法是模型分析的一組可行性的、確定的和有窮的規則。 經典算法特征:有窮性、確切性、輸入、輸出和可行性。 常用的算法包括遞推、遞歸、窮…

maven如何建立JavaWeb項目并連接數據庫,驗證登錄

這里是建立建立web項目:Maven如何創建Java web項目(純干貨版)!!!_明天更新的博客-CSDN博客 我們主要演示如何連接數據庫驗證登錄。 1.在webapp目錄下創建我們的登錄頁面:index.jsp 還需要再…

Android漏洞之戰——整體加殼原理和脫殼技巧詳解

一、前言 為了幫助更加方便的進行漏洞挖掘工作,前面我們通過了幾篇文章詳解的給大家介紹了動態調試技術、過反調試技術、Hook技術、過反Hook技術、抓包技術等,掌握了這些可以很方便的開展App漏洞挖掘工作,而最后我們還需要掌握一定的脫殼技巧…

opencv基礎:幾個常用窗口方法

開始說了一些opencv中的一些常用方法。 namedWindow方法 在OpenCV中,namedWindow函數用于創建一個窗口,并給它指定一個名字。這個函數的基本語法如下: import cv2cv2.namedWindow(窗口名稱, 標識 )窗口名稱:其實窗口名稱&…

Azure創建自定義VM鏡像

創建一個虛擬機,參考 https://blog.csdn.net/m0_48468018/article/details/132267096,入站端口開啟80,22 進行遠程遠程連接 使用CLI命令部署NGINX,輸入如下命令 sudo su apt-get update -y apt-get install nginx git -y最后的效果 4. 關閉…

非結構化數據庫-MinIO基本集成

是什么 MinIO 是一個高性能的分布式對象存儲服務,適合存儲非結構化數據,如圖片,音頻,視頻,日志等。對象文件最大可以達到5TB。 安裝啟動 mkdir -p /usr/local/minio cd /usr/local/minio# 下載安裝包 wget https:/…

pandas.errors.ParserError: Error tokenizing data. C error: out of memory

目錄 用pandas讀入數據的時候發現數據讀入時出錯了,數據量感覺也不是很大 十萬多條數據。電腦內存是16個G。報錯信息為:“ pandas.errors.ParserError: Error tokenizing data. C error: out of memory” 想想不對啊 昨天都可以順利的讀入,現…

你真的掌握了 Python 的七種參數了嗎?

不知道為什么網上總有人說 Python 的參數類型有 4 種啊,5 種啊,殊不知其實有 7 種。Python 的 7 種參數分別是 默認參數、位置參數、關鍵字參數、可變長位置參數、可變長關鍵字參數、僅位置參數 和 僅關鍵字參數。小白可能沒見過“可變長參數”&#xff…

lvs-dr模式

一,數據包流向: 1,cilent向目標vip發出請求,dir接收,此時ip報頭數據幀頭信息。 2,dir根據負載均衡算法給rs(rip),將rip所在網卡的mac地址作為目標的mac地址,發…

深入解析Spring基本概念和核心思想

文章目錄 基本概念IoCIoc容器IoC理解IoC的步驟Spring中使用ioc的步驟 AopAop的理解Aop的步驟 控制反轉誰控制誰? 控制什么?為何叫反轉(對應于正向)?哪些方面反轉了?為何需要反轉? 依賴什么是依賴(按名稱理解、按動詞理解)? 誰依賴于誰? 為什么需要依賴? 依賴什么東西?…

vscode如何漢化

首先我們到vscode官網下載 鏈接如下: Visual Studio Code - Code Editing. Redefined 根據自己需要的版本下載就好 下載并且安裝完畢之后 運行vscode 然后按快捷鍵 CTRLSHIFTX 打開安裝擴展界面 搜索簡體中文 安裝就可以了 謝謝大家觀看

npm ERR!Cannot read properties of null(reading ‘pickAlgorithm’)報錯問題解決

當在使用npm包管理器或執行npm命令時,有時候會遇到“npm ERR!Cannot read properties of null(reading ‘pickAlgorithm’)”這個錯誤提示,這是一個常見的npm錯誤。 這個錯誤提示通常說明在使用npm包管理器時,執行了某個npm命令,…

學習筆記整理-正則表達式-01-認識正則

一、基本認識 1. 什么是正則表達式 正則表達式(regular expression)描述了字符串"構成模式",經常被用于檢查字符串是否符合預定的格式要求。 用一個例子快速演示正則表達式基本使用方法:檢查某個字符串是否是6位數字 // 要檢查的字符串va…

第五課:聯合體或共用體 Union

功能描述:聯合體或共用體 Union 的介紹及使用方法 一、Union 簡介 共同體(union)也稱為聯合體,它能在同一個內存空間中存儲不同的數據類型(不是同時存儲),其典型的用法是,設計一種表…

Vue3 —— watchEffect 高級偵聽器

該文章是在學習 小滿vue3 課程的隨堂記錄示例均采用 <script setup>&#xff0c;且包含 typescript 的基礎用法 前言 Vue3 中新增了一種特殊的監聽器 watchEffect&#xff0c;它的類型是&#xff1a; function watchEffect(effect: (onCleanup: OnCleanup) > void,o…

整理mongodb文檔:find方法查詢數據

個人博客 整理mongodb文檔:find方法查詢數據 求關注&#xff0c;求批評&#xff0c;求指出&#xff0c;如果哪兒不清晰&#xff0c;請指出來&#xff0c;謝謝 文章概敘 如題&#xff0c;本文講的是如何用find查詢數據&#xff0c;如何在數組、字段、對象中查詢&#xff0c;以…