Flink 能否動態更改 Checkpoint 配置?

前段時間在社區郵件中看到有人提問是否可以動態開啓 Checkpoint,昨天在釘釘羣中又看到有個同學在問能夠動態調整 Checkpoint 的時間,其實不僅僅是這些,在社區郵件和羣裏經常看到有問這塊內容的問題,所以可以發現在 Flink 中其實關於 Checkpoint 相關的東西還是非常重要且解決起來比較麻煩,估計應該也困擾了不少人。

不過今天的話題不是在於去討論 Checkpoint 的機制,因爲前面兩個問題都涉及到了動態的去配置 Checkpoint 的參數(是否開啓和 Checkpoint 的時間間隔),而 zhisheng 我在前面通過兩個視頻講解了 Flink 如何與 Apollo 和 Nacos 整合去動態的更改作業配置,所以私底下就有同學找我諮詢是否可以動態的更改 Checkpoint 配置,我當時因爲知道其實有些參數是一旦初始化了之後是改不了的,但是具體什麼參數我也不難全部列舉,所以只好回答那位同學說:以自己實測的結果爲準哈。

所以這裏我就給大家演示一下到底是否可以動態的更改 Checkpoint 配置,請看我在 B 站的視頻(點擊文章末尾的閱讀原文可以查看):

https://www.bilibili.com/video/av92655075/

通過這個視頻,雖然我是使用 Flink 和 Nacos 整合的,作業監聽到了 Checkpoint 的配置做了修改,但是可以發現其實 Checkpoint 更改後其實是不生效的。

這裏僅從個人的思考來解釋一下:因爲 Flink 是 Lazy Evaluation(延遲執行),當程序的 main 方法執行時,我們創建的 env 會依次進行屬性的初始化配置,但是數據源加載數據和數據轉換等算子不會立馬執行,這些算子操作會被創建並添加到程序的執行計劃中去,只有當執行環境 env 的 execute 方法被顯示地觸發執行時,整個程序纔開始執行實際的操作(StreamGraph -> JobGraph -> ExecutionGraph),所以在程序執行 execute 方法後再修改 env 的配置其實就不起作用了。

另外給大家來看下邱從賢(負責 Flink State 相關)對能否動態配置 Checkpoint 的回答:

相關的測試代碼在: https://github.com/zhisheng17/flink-learning/blob/master/flink-learning-configration-center/flink-learning-configration-center-nacos

END

關注我
公衆號(zhisheng)裏回覆 面經、ES、Flink、 Spring、Java、Kafka、監控 等關鍵字可以查看更多關鍵字對應的文章。

你點的每個贊,我都認真當成了喜歡

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