Flink 三種狀態存儲方式 MemoryStateBackend、FsStateBackend、RocksDBStateBackend

StateBackend的意思是狀態後端。

狀態後端定義了流式應用程序狀態如何存儲和checkpoint的。不同的狀態後端以不同的方式來存儲其狀態,並且使用不同的數據結構來保存正在運行的應用程序的狀態。

 

MemoryStateBackend:

1 基於內存的狀態管理器,聚合類算子的狀態會存儲在JobManager的內存中

2 單次狀態大小默認最大被限制爲5MB,可以通過構造函數來指定狀態初始化內存大小。無論單次狀態大小最大被限制爲多少,都不可大於akka的frame大小(1.5MB,JobManager和TaskManager之間傳輸數據的最大消息容量)。狀態的總大小不能超過 JobManager 的內存。

3 是Flink默認的後端狀態管理器,默認是異步的

4 主機內存中的數據可能會丟失,任務可能無法恢復

5 將工作state保存在TaskManager的內存中,並將checkpoint數據存儲在JobManager的內存中

適用:

  • 本地開發和調試
  • 狀態比較少的作業

 

FsStateBackend:

1 基於文件系統的狀態管理器

2 如果使用,默認是異步

3 比較穩定,3個副本,比較安全。不會出現任務無法恢復等問題

4 狀態大小受磁盤容量限制

5 將工作state保存在TaskManager的內存中,並將checkpoint數據存儲在文件系統中

適用:

  • 狀態比較大,窗口比較長,大的KV狀態

 

RocksDBStateBackend:

1 狀態數據先寫入RocksDB,然後異步的將狀態數據寫入文件系統。

2 正在進行計算的熱數據存儲在RocksDB,長時間才更新的數據寫入磁盤中(文件系統)存儲,體量比較小的元數據狀態寫入JobManager內存中(將工作state保存在RocksDB中,並且默認將checkpoint數據存在文件系統中)

3 支持的單 key 和單 value 的大小最大爲每個 2^31 字節(2GB)

4 RocksDBStateBackend是目前唯一支持incremental的checkpoints的策略

5 如果使用,默認是異步 

適用:

  • 非常大的狀態,長窗口,大的KV狀態
  • 增量checkpoint

 

性能:MemoryStateBackend>RocksDBStateBackend>FsStateBackend

---------------

參考:

《Flink原理、實戰與性能優化》

https://www.jianshu.com/p/64e8588740e0

https://www.cnblogs.com/029zz010buct/p/9403283.html

https://www.cnblogs.com/YuanWeiBlogger/p/12072782.html

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