全部產品
Search
文件中心

Realtime Compute for Apache Flink:Flink狀態相容性

更新時間:Nov 28, 2024

Realtime ComputeFlink版提供狀態相容性檢查和狀態資料移轉功能。本文為您介紹相容性判斷的結果詳情,以及RocksDB和Gemini兩種StateBackend在狀態資料移轉時的遷移效率和作業表現方面的區別。

背景資訊

Flink作業是通過狀態資料(包括Checkpoint和Savepoint)儲存作業中間的計算結果。當前Flink SQL已經可以協助您支援各種Realtime Compute情境。為了滿足開發迭代需求或業務發展需求,SQL作業也需要不斷變更,否則修改SQL作業後,並使用原來的狀態資料重啟作業,會出現狀態不相容的問題。

從vvr-4.0.11-flink-1.13版本開始,Realtime ComputeFlink版提供狀態相容性檢查和狀態資料移轉功能,可以最大可能地複用原來的狀態資料,協助您快速升級SQL作業。作業修改上線後,如果您選擇基於狀態啟動作業,則系統會根據您選擇的狀態資料,給出相容性判斷,結果詳情請參見相容性

為了讓您選擇的狀態資料能適配新作業,則需要對狀態資料進行遷移。Realtime ComputeFlink版支援RocksDB和Gemini兩種StateBackend,二者在遷移效率和作業表現方面有一定的區別,詳情請參見狀態遷移

相容性

作業啟動頁面選擇有狀態啟動時,Flink系統會自動檢測SQL作業的變化(SQL、Flink運行參數配置和引擎版本),當檢測到作業發生變化時,建議單擊狀態相容性檢測旁的點擊檢測檢查相容性,並依據相容性結果後決定後續行為。

重要

當SQL作業有變化時,選擇有狀態啟動必須先執行狀態相容性檢測,才能在滿足所有必要條件的情況下實現相容性恢複。

相容性結果含義及建議詳情如下:

  • 完全相容

    當前作業變化和最新狀態資料完全相容。即基於最新狀態資料啟動並執行結果和完全基於歷史資料啟動並執行結果一致,建議啟動。

  • 部分相容

    當前作業變化和最新狀態資料部分相容。即相容的部分列基於狀態資料啟動並執行結果和完全基於歷史資料啟動並執行結果一致,其餘列在狀態中沒有對應的資料,和完全基於歷史資料啟動並執行結果不一致。為了達到完全相容,建議使用其他狀態或者無狀態啟動作業。

  • 不相容

    警告

    如果基於該狀態資料啟動,大機率會出現啟動失敗或者運行結果不符合預期的問題,請謹慎選擇。建議使用其他狀態或者無狀態啟動作業。

  • 目前狀態是否相容需要重啟後判斷(未知相容)

    警告

    如果基於該狀態資料啟動,可能會出現啟動失敗或者運行結果不符合預期的問題,請謹慎選擇。

狀態遷移

RocksDB和Gemini的遷移效率和作業表現方面的區別詳情如下:

  • RocksDB

    RocksDB是在作業啟動時,會對所有的狀態資料進行一次全量的遷移。此時整個作業已經啟動,處於RUNNING狀態,而需要發生資料移轉的運算元處於INITIALIZING狀態,並且不會消費和處理任何資料。等該運算元所有資料都遷移完成,運算元的狀態會變為RUNNING狀態,表示所有狀態遷移完成,開始正常消費資料。RocksDB

    說明

    因為修改了Aggregate Function,所以在作業啟動時,RocksDB會進行全量狀態遷移。上圖中的GroupAggregate運算元處於INITIALIZING狀態,此時該運算元不能處理資料。

  • Gemini

    與RocksDB在作業啟動時進行狀態全量遷移的行為不同,Gemini是在作業運行時按需遷移,即只有訪問到狀態中某條資料時,這條資料才會發生遷移。整個作業啟動後,作業處於RUNNING狀態,需要發生狀態遷移的運算元會很快從INITIALIZING狀態變為RUNNING狀態,並開始正常消費資料。隨著狀態遷移的進行,TPS會逐漸恢複到正常值,表示所有狀態遷移完成。相比RocksDB,Gemini的整體遷移時間更短。Gemini

    說明

    在Gemini和RocksDB對應完全相同的SQL和狀態資料時,Gemini很快從INITIALIZING狀態(載入狀態資料)變為RUNNING狀態,並開始處理資料。