Flink檢查點/保存點提交

檢查點生成多個

  Flink的檢查點默認是生成一個,想要生成多個可以在conf/flink-conf.yaml中添加如下的參數,在這裏我設置的是讓其生成2個:state.checkpoints.num-retained: 2

如何通過檢查點重新提交?

  保存點和檢查點內部的生成算法是一致的,工作方式也一致,但保存點相比較檢查點有什麼不同呢?

  保存點與檢查點有什麼不同?

  1. 生成邏輯不同
    a) 檢查點:通過代碼進行生成
    b) 保存點:由用戶通過flink命令行或者web控制檯進行手動觸發
  2. 存儲的信息不同
    保存點相比較檢查點來說存儲了更爲詳細的一些元數據信息。

檢查點在什麼情況下觸發?
  例如我在另一篇博文中所描述的“重啓策略”中的例子,檢查點在作業意外失敗後會自動重啓,並能夠從保存的檢查點路徑中自動恢復狀態,且不影響作業邏輯的準確性。

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的數據不會丟失
(可查看前面“重啓策略”中的問答環節)

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