文章目錄
- 1.默認情況
- 2.flink中的狀態
- 3.RocksDB
- 4.對比情況
- 5.使用
- 6.RocksDB架構
- 7.參考文章
- 8.總結
提示:以下主要考慮flink 狀態永久存儲 rocksdb情況,做一些簡單說明
1.默認情況
當flink使用rocksdb存儲狀態時。無論是永久存儲還是臨時存儲都可能會落盤寫文件(如果沒有配置存儲時間,則默認是永久存儲),rocksdb是flink內嵌的數據庫,主要由flink自動存儲管理狀態數據。
2.flink中的狀態
為了更好地理解 Flink 中的狀態和狀態后端,區分運行中狀態和狀態快照至關重要。運行中狀態,也稱為工作狀態,是 Flink 作業正在處理的狀態。它始終存儲在本地內存中(有可能溢出到磁盤),并且當作業失敗時可能會丟失,但不影響作業的可恢復性。狀態快照,即檢查點和保存點,存儲在遠程持久存儲中,用于在作業失敗時恢復本地狀態。適合生產部署的狀態后端取決于可擴展性、吞吐量和延遲要求。
3.RocksDB
RocksDB 是一個需要在集群上運行并由專門管理員管理的分布式數據庫,這是一種常見的誤解。RocksDB 是一個可嵌入的持久化鍵值存儲,用于快速存儲。它通過 Java 原生接口 (JNI) 與 Flink 交互。下圖展示了 RocksDB 在 Flink 集群節點中的位置。更多細節將在后續章節中介紹。
4.對比情況
除了 RocksDBStateBackend 之外,Flink 還有另外兩個內置狀態后端:MemoryStateBackend 和 FsStateBackend。它們都是基于堆的,因為運行中的狀態存儲在 JVM 堆中。目前,我們先忽略 MemoryStateBackend,因為它僅用于本地開發和調試,不適用于生產環境。
使用 RocksDBStateBackend,運行中狀態首先寫入堆外/原生內存,然后在達到配置的閾值時刷新到本地磁盤。這意味著 RocksDBStateBackend 可以支持大于配置堆總容量的狀態。RocksDBStateBackend 中可存儲的狀態量僅受整個集群