Flink知識學習(20)
在啟動 Checkpoint 機制時,狀態(tài)會隨著 Checkpoint 而持久化,以防止數(shù)據(jù)丟失,保障恢復時的一致性。狀態(tài)內(nèi)部的存儲格式、狀態(tài)在 Checkpoint 時如何持久化以及持久化在哪里,均取決于所選擇的 State Backend,即狀態(tài)后端。
默認State會保存在TaskManager的內(nèi)存中,Checkpoint會存儲在JobManager的內(nèi)存中。State和Checkpoint的存儲位置取決于State Backend的配置。Flink 內(nèi)置了以下這些開箱即用的State Backend:
(1)MemoryStateBackend:基于內(nèi)存;
(2)FsStateBackend:基于文件系統(tǒng),可以是本地文件系統(tǒng),也可以是HDFS文件系統(tǒng);
(3)RocksDBStateBackend:基于RockDB作為存儲介質(zhì)。
如果不設(shè)置,默認使用 MemoryStateBackend。
MemoryStateBackend
new MemoryStateBackend(int maxStateSize, boolean asynchronousSnapshots)
MemoryStateBackend,構(gòu)造方法是設(shè)置最大的 StateSize,選擇是否做異步快照。這種存儲狀態(tài)本身存儲在 TaskManager 節(jié)點也就是執(zhí)行節(jié)點內(nèi)存中的,因為內(nèi)存有容量限制,所以單個 State maxStateSize 默認 5 M,且需要注意 maxStateSize <= akka.framesize 默認 10 M。Checkpoint 存儲在 JobManager 內(nèi)存中,因此總大小不超過 JobManager 的內(nèi)存。推薦使用的場景為:本地測試、幾乎無狀態(tài)的作業(yè),比如 ETL、JobManager 不容易掛,或掛掉影響不大的情況。不推薦在生產(chǎn)場景使用。
FsStateBackend
FsStateBackend(URI checkpointDataUri? ,boolean? asynchronousSnapshots)
FsStateBackend ,構(gòu)建方法是需要傳一個文件路徑和是否異步快照。State 依然在 TaskManager 內(nèi)存中,但不會像 MemoryStateBackend 有 5 M 的設(shè)置上限,Checkpoint 存儲在外部文件系統(tǒng)(本地或 HDFS),打破了總大小 Jobmanager 內(nèi)存的限制。容量限制上,單 TaskManager 上 State 總量不超過它的內(nèi)存,總大小不超過配置的文件系統(tǒng)容量。推薦使用的場景、常規(guī)使用狀態(tài)的作業(yè)、例如分鐘級窗口聚合或 join、需要開啟 HA 的作業(yè)。
RocksDBStateBackend
RocksDBStateBackend(URI checkpointDataUri? ,boolean? enableIncremental-Checkpointing)
RocksDBStateBackend,RocksDB 是一個 key/value 的內(nèi)存存儲系統(tǒng),和其他的 key/value 一樣,先將狀態(tài)放到內(nèi)存中,如果內(nèi)存快滿時,則寫入到磁盤中,但需要注意 RocksDB 不支持同步的 Checkpoint,構(gòu)造方法中沒有同步快照這個選項。不過 RocksDB 支持增量的 Checkpoint,也是目前唯一增量 Checkpoint 的 Backend,意味著每次用戶不需要將所有狀態(tài)都寫進去,將增量的改變的狀態(tài)寫進去即可。它的 Checkpoint 存儲在外部文件系統(tǒng)(本地或 HDFS),其容量限制只要單個 TaskManager 上 State 總量不超過它的內(nèi)存 + 磁盤,單 Key 最大 2G,總大小不超過配置的文件系統(tǒng)容量即可。推薦使用的場景為:超大狀態(tài)的作業(yè),例如天級窗口聚合、需要開啟 HA 的作業(yè)、最好是對狀態(tài)讀寫性能要求不高的作業(yè)。
Flink知識學習告一段落。
Flink Hadoop
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。