Flink基礎05-Flink狀態管理

目錄
Flink中的狀態
算子狀態(Operator State)
鍵控狀態(Keyed State)
狀態後端(State Backends)

Flink中的狀態
在這裏插入圖片描述
(1)由一個任務維護,並且用來計算某個結果的所有數據,都屬於這個任務的狀態
(2)可以認爲狀態就是一個本地變量,可以被任務的業務邏輯訪問
(3)Flink會進行狀態管理,包括狀態一致性、故障處理以及高效存儲和訪問,以便開發人員可以專注於應用程序的邏輯
(4)在flink中,狀態始終與特定算子相關聯
(5)爲了是運行時的flink瞭解算子的狀態,算子需要預先註冊其狀態

總結,有兩種類型的狀態
算子狀態(Operator State)
算子狀態的作用範圍限定爲算子任務
鍵控狀態(Keyed State)
根據輸入數據流中定義的鍵(key)來維護和訪問

算子狀態(Operatior State)
在這裏插入圖片描述
(1)算子狀態的作用範圍限定爲算子任務,由同意並行任務所處理的所有數據都可以訪問到相同的狀態
(2)狀態對於同一任務而言是共享的
(3)算子狀態不能由相同或不同算子的另一個任務訪問
算子狀態數據結構
列表狀態(List state):將狀態表示爲一組數據的列表
聯合列表狀態(Union list state):將狀態表示爲數據的列表。它與常規列表狀態的區別在於,在發生故障時,或者從保存點(savepoint)啓動應用程序時如何恢復
廣播狀態(Broadcast state):如果一個算子有多項任務,而他的每項任務狀態又都相同,那麼這種特殊情況最適合應用廣播狀態

鍵控狀態(Keyed State)
在這裏插入圖片描述
(1)鍵控狀態是根據輸入數據流中定義的鍵(key)來維護和訪問的
(2)Flink爲每個key維護一個狀態實例,並將具有相同鍵的所有數據,都分區到同一個算子任務中,這個任務會維護和處理這個key對應的狀態
(3)當任務處理一條數據時,它會自動將狀態的訪問範圍限定爲當前數據的key
鍵控狀態數據結構
值狀態(Value state):將狀態表示爲單個的值
列表狀態(List state):將狀態表示爲一組數據的列表
映射狀態(Map state): 將狀態表示爲一組Key-Value對
聚合狀態(Reducing state&Aggregating State):將狀態表示爲一個用於聚合操作的列表
鍵控狀態的使用
在這裏插入圖片描述

狀態後端(State Backends)
(1)每傳入一條數據,有狀態的算子任務都會讀取和更新狀態
(2)由於有效的狀態訪問對於處理數據的低延遲至關重要,因此每個並行任務都會在本地維護其狀態,以確保快速的狀態訪問
(3)狀態的存儲、訪問以及維護,由一個可插入的組件決定,這個組件就是狀態後端(state backend)
(4)狀態後端主要負責兩件事:本地的狀態管理,以及將檢查點(checkpoint)狀態寫入遠程存儲
選擇一個狀態後端
MemoryStateBackend
內存級的狀態後端,會將鍵控狀態作爲內存中的對象進行管理,將他們存儲在TaskManager的Jvm堆上,而將checkpoint存儲在JobManager的內存中
特點:快速、低延遲、但不穩定
FsStateBackend
將checkpoint存到遠程的持久化文件系統(FileSystem)上,而對於本地狀態,跟MemoryStateBackend一樣,也會存在TaskManager的JVM堆上
同時擁有內存級的本地訪問速度,和更好的容錯保證
RocksDBStatebackend
將所有狀態序列化後,存入本地的RocksDB中存儲

附思維導圖
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章