Flink狀態兼容性
實時計算Flink版提供狀態兼容性檢查和狀態數據遷移功能。本文為您介紹兼容性判斷的結果詳情,以及RocksDB和Gemini兩種StateBackend在狀態數據遷移時的遷移效率和作業表現方面的區別。
背景信息
Flink作業是通過狀態數據(包括Checkpoint和Savepoint)保存作業中間的計算結果。當前Flink SQL已經可以幫助您支持各種流計算場景。為了滿足開發迭代需求或業務發展需求,SQL作業也需要不斷變更,否則修改SQL作業后,并使用原來的狀態數據重啟作業,會出現狀態不兼容的問題。
從vvr-4.0.11-flink-1.13版本開始,實時計算Flink版提供狀態兼容性檢查和狀態數據遷移功能,可以最大可能地復用原來的狀態數據,幫助您快速升級SQL作業。作業修改上線后,如果您選擇基于狀態啟動作業,則系統會根據您選擇的狀態數據,給出兼容性判斷,結果詳情請參見兼容性。
為了讓您選擇的狀態數據能適配新作業,則需要對狀態數據進行遷移。實時計算Flink版支持RocksDB和Gemini兩種StateBackend,二者在遷移效率和作業表現方面有一定的區別,詳情請參見狀態遷移。
兼容性
在作業啟動頁面選擇有狀態啟動時,Flink系統會自動檢測SQL作業的變化(SQL、Flink運行參數配置和引擎版本),當檢測到作業發生變化時,建議單擊狀態兼容性檢測旁的點擊檢測檢查兼容性,并依據兼容性結果后決定后續行為。
當SQL作業有變化時,選擇有狀態啟動必須先執行狀態兼容性檢測,才能在滿足所有必要條件的情況下實現兼容性恢復。
兼容性結果含義及建議詳情如下:
完全兼容
當前作業變化和最新狀態數據完全兼容。即基于最新狀態數據運行的結果和完全基于歷史數據運行的結果一致,建議啟動。
部分兼容
當前作業變化和最新狀態數據部分兼容。即兼容的部分列基于狀態數據運行的結果和完全基于歷史數據運行的結果一致,其余列在狀態中沒有對應的數據,和完全基于歷史數據運行的結果不一致。為了達到完全兼容,建議使用其他狀態或者無狀態啟動作業。
不兼容
警告如果基于該狀態數據啟動,大概率會出現啟動失敗或者運行結果不符合預期的問題,請謹慎選擇。建議使用其他狀態或者無狀態啟動作業。
當前狀態是否兼容需要重啟后判斷(未知兼容)
警告如果基于該狀態數據啟動,可能會出現啟動失敗或者運行結果不符合預期的問題,請謹慎選擇。
狀態遷移
RocksDB和Gemini的遷移效率和作業表現方面的區別詳情如下:
RocksDB
RocksDB是在作業啟動時,會對所有的狀態數據進行一次全量的遷移。此時整個作業已經啟動,處于RUNNING狀態,而需要發生數據遷移的算子處于INITIALIZING狀態,并且不會消費和處理任何數據。等該算子所有數據都遷移完成,算子的狀態會變為RUNNING狀態,表示所有狀態遷移完成,開始正常消費數據。
說明因為修改了Aggregate Function,所以在作業啟動時,RocksDB會進行全量狀態遷移。上圖中的GroupAggregate算子處于INITIALIZING狀態,此時該算子不能處理數據。
Gemini
與RocksDB在作業啟動時進行狀態全量遷移的行為不同,Gemini是在作業運行時按需遷移,即只有訪問到狀態中某條數據時,這條數據才會發生遷移。整個作業啟動后,作業處于RUNNING狀態,需要發生狀態遷移的算子會很快從INITIALIZING狀態變為RUNNING狀態,并開始正常消費數據。隨著狀態遷移的進行,TPS會逐漸恢復到正常值,表示所有狀態遷移完成。相比RocksDB,Gemini的整體遷移時間更短。
說明在Gemini和RocksDB對應完全相同的SQL和狀態數據時,Gemini很快從INITIALIZING狀態(加載狀態數據)變為RUNNING狀態,并開始處理數據。