Flink的State

    有狀態的計算是流式計算框架的一個重要功能,很多複雜的計算場景都需要記錄一下相關的狀態。Flink State一種爲了滿足算子計算時需要歷史數據需求的,使用 checkpoint 機制進行容錯,存儲在 state backend 的數據結構。

1.State分類

    Flink State被分爲keyedstate、operatorstate、BroadcastState三種;keyedstate主要應用在keystream上,它的特點是同一個子任務的同一個key共享同一個state;另一個operatorstate主要應用應用在source和sink,它的特點是同一個子任務共享同一個state。BroadcastState同一個算子的多個 sub task 共享一個 state。

 

2.state數據結構

    state的數據結構包含ValueState 、MapState 、ListState三種結構。

ValueState 存儲單個值,訪問接口可能有兩種,get 和 set,在 State 上體現的是 update(T) / T value()。
MapState 的狀態數據類型是 Map,在 State 上有 put、remove等。
ListState 狀態數據類型是 List,訪問接口如 add、update 等。

  

存儲大的對象時要慎用ValueState 。

3.state存儲介質

    state可以存儲到內存、文件、RocksDB。

基於內存的 MemoryStateBackend,狀態存儲在內存中,cp存儲到jobmanager的內存中。
基於 HDFS 或 OSS 的 FsStateBackend,狀態存儲在taskmanger的內存中,在做 cp(checkpoint)時存到文件系統,文件系統可以是HDFS。
基於 RocksDB 的 RocksDBStateBackend,將對象序列化成二進制存在內存和本地磁盤的 RocksDB 數據中,並在 cp 時存到文件系統,文件系統可以是HDFS。

 

 

 

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