檢查點生成多個
Flink的檢查點默認是生成一個,想要生成多個可以在conf/flink-conf.yaml中添加如下的參數,在這裏我設置的是讓其生成2個:state.checkpoints.num-retained: 2
如何通過檢查點重新提交?
保存點和檢查點內部的生成算法是一致的,工作方式也一致,但保存點相比較檢查點有什麼不同呢?
保存點與檢查點有什麼不同?
- 生成邏輯不同
a) 檢查點:通過代碼進行生成
b) 保存點:由用戶通過flink命令行或者web控制檯進行手動觸發 - 存儲的信息不同
保存點相比較檢查點來說存儲了更爲詳細的一些元數據信息。
檢查點在什麼情況下觸發?
例如我在另一篇博文中所描述的“重啓策略”中的例子,檢查點在作業意外失敗後會自動重啓,並能夠從保存的檢查點路徑中自動恢復狀態,且不影響作業邏輯的準確性。
Q:由於作業重啓失敗,程序退出,我此時修改完BUG後,想要讓我的程序接着當初失敗的地方重新運行,那麼我應如何啓動程序呢?
A:讀取失敗的檢查點,然後依託它重新運行即可
sudo
-u hdfs /myflink/flink-1.7.2/bin/flink run -s
hdfs://master:8020/flink/checkpoint0/61c58bf29cbcabb8c2e3146ff4eb24b9/chk-15
-m yarn-cluster
-c flink.ceshi /opt/flink_path/sbt-solr-assembly.jar
(-s後面表示的是我檢查點的路徑,該命令代表的是從我當初檢查點處“繼續”運行)
此時可以看到我該目錄下面有2個檢查點了,
“0b3f0bcca83ed8c7176a8eed06296c1a”
該檢查點是依託
“61c58bf29cbcabb8c2e3146ff4eb24b9”
檢查點的狀態生成的新檢查點
保存點在什麼情況下觸發?
保存點側重的是維護,即flink作業需要在人工干預的情況下進行重啓或升級,維護完畢後再從保存點恢復到升級後的狀態。
不取消當前應用時創建保存點
sudo -u hdfs /myflink/flink-1.7.2/bin/flink
savepoint 0b3f0bcca83ed8c7176a8eed06296c1a
(注意這裏的與前面的檢查點要保持一致,因爲我要對A程序的檢查點進行手動創建保存點,而A程序對應的檢查點則是該檢查點)
-yid application_1588754764898_0023
(針對flink on yarn模式需要指定jobID)
hdfs://master:8020/flink/checkpoint03/s1
取消當前flink應用之前生成保存點
sudo -u hdfs /myflink/flink-1.7.2/bin/flink cancel
-s hdfs://master:8020/flink/checkpoint03/s2
b5745a9e4fe87c403a05e7fc73cacee7
-yid application_1588995876125_0052
從保存點處啓動程序
sudo -u hdfs /myflink/flink-1.7.2/bin/flink run
-s
hdfs://master:8020/flink/checkpoint03/s1/savepoint-0b3f0b-ed13f369aadc
-m yarn-cluster
-c flink.ceshi /opt/flink_path/sbt-solr-assembly.jar
Q:在我殺死A程序到我從保存點啓動A程序的這個過程當中,我的kafka數據沒有斷過,那麼此時當我從保存點重新啓動程序時,我的數據會丟失嗎?
A:答案是不會,因爲當你在生成保存點時,是通過檢查點進行生成的,而檢查點中是有Kafka的偏移量的,因此你kafka的數據不會丟失
(可查看前面“重啓策略”中的問答環節)