概述
Checkpoint通過允許從狀態(tài)和相應(yīng)流的位置進(jìn)行恢復(fù)多糠,從而使Flink中的狀態(tài)具備容錯(cuò)能力懦尝,從而使應(yīng)用程序具有與無故障執(zhí)行相同的語義知纷。
為你的程序如何開啟和配置checkpoint見Checkpointing for how to enable and configure checkpoints for your program.
Externalized Checkpoints
默認(rèn)情況下,checkpoint不是持久化的陵霉,只用于從故障中恢復(fù)作業(yè)琅轧。當(dāng)程序被取消時(shí),它們會(huì)被刪除踊挠。但是你可以配置checkpoint被周期性持久化到外部乍桂,類似于savepoints冲杀。這些外部的checkpoints將它們的元數(shù)據(jù)輸出到外部持久化存儲(chǔ)并且當(dāng)作業(yè)失敗時(shí)不會(huì)自動(dòng)清除。這樣睹酌,如果你的工作失敗了权谁,你就會(huì)有一個(gè)checkpoint來恢復(fù)。
CheckpointConfig config = env.getCheckpointConfig();
config.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
ExternalizedCheckpointCleanup
模式配置當(dāng)你取消作業(yè)時(shí)外部checkpoint會(huì)產(chǎn)生什么行為:
ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION
: 當(dāng)作業(yè)被取消時(shí)憋沿,保留外部的checkpoint旺芽。注意,在此情況下辐啄,您必須手動(dòng)清理checkpoint狀態(tài)采章。ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION
: 當(dāng)作業(yè)被取消時(shí),刪除外部化的checkpoint壶辜。只有當(dāng)作業(yè)失敗時(shí)悯舟,檢查點(diǎn)狀態(tài)才可用。
目錄結(jié)構(gòu)
類似于savepoints, 一個(gè)外部的checkpoint由一個(gè)元數(shù)據(jù)文件和一些額外的數(shù)據(jù)文件(依賴于狀態(tài)后端)組成砸民。外部的checkpoint的元數(shù)據(jù)文件的目標(biāo)目錄由配置state.checkpoints.dir
決定抵怎,當(dāng)前只能通過配置文件設(shè)值。
state.checkpoints.dir: hdfs:///checkpoints/
這個(gè)目錄包含恢復(fù)checkpoint所需要的checkpoint元數(shù)據(jù)阱洪。對(duì)于 MemoryStateBackend
便贵,它的元數(shù)據(jù)文件是自包含的,不需要更多的文件冗荸。
FsStateBackend
和 RocksDBStateBackend
寫?yīng)毩⒌臄?shù)據(jù)文件承璃,只將這些文件的目錄寫入到元數(shù)據(jù)文件中。這些數(shù)據(jù)文件存儲(chǔ)在構(gòu)建作業(yè)時(shí)為狀態(tài)后端指定的路徑中蚌本。
env.setStateBackend(new RocksDBStateBackend("hdfs:///checkpoints-data/");
與Savepoints的差異
外部的checkpoints與savepoints有一些差異盔粹。 它們
- 使用狀態(tài)后端特定的(low-level)的數(shù)據(jù)格式,
- 可能是增量的,
- 不支持Flink特定的功能,例如rescaling
從一個(gè)外部的checkpoint恢復(fù)
一個(gè)作業(yè)就像從一個(gè)savepoint一樣(見savepoint restore guide)程癌,可能會(huì)通過使用checkpoint的元數(shù)據(jù)文件舷嗡,從一個(gè)外部的checkpoint恢復(fù)。注意嵌莉,如果元數(shù)據(jù)文件不是自包含的进萄,jobmanager需要訪問它引用的元數(shù)據(jù)文件(見上述的目錄結(jié)構(gòu))。
$ bin/flink run -s :checkpointMetaDataPath [:runArgs]