Amazon Managed Service for Apache Flink 之前稱為 Amazon Kinesis Data Analytics for Apache Flink。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用快照管理應用程式備
快照是 Apache Flink 儲存點的 Managed Service for Apache Flink 實作。快照是使用者或服務觸發、建立和管理的應用程式狀態備份。如需有關 Apache Flink 儲存點的資訊,請參閱 Apache Flink 文件中的儲存點
注意
建議您的應用程式每天建立數次快照,以便使用正確的狀態資料正確重新啟動。快照的正確頻率取決於應用程式的業務邏輯。拍攝頻繁的快照可讓您復原較新的資料,但會增加成本並需要更多的系統資源。
在 Apache Flink 的受管理服務中,您可以使用下列API動作來管理快照集:
如需每個應用程式的快照數目限制,請參閱Managed Service for Apache Flink 和 Studio 筆記本配額。如果您的應用程式達到快照數目限制,則手動建立快照會失敗,並顯示 LimitExceededException
。
Managed Service for Apache Flink 永遠不會刪除快照。您必須使用 DeleteApplicationSnapshot
動作手動刪除快照。
若要在啟動應用程式時載入儲存的應用程式狀態快照,請使用 StartApplication
或 UpdateApplication
動作的 ApplicationRestoreConfiguration
參數。
本主題包含下列章節:
管理自動建立快照
如果SnapshotsEnabled
在應用程式的true
中設定 ApplicationSnapshotConfiguration為,Apache Flink 的受管理服務會在應用程式更新、調整或停止時自動建立並使用快照,以提供只有一次的處理語意。
注意
將 ApplicationSnapshotConfiguration::SnapshotsEnabled
設定為 false
會導致應用程式更新期間資料遺失。
注意
Managed Service for Apache Flink 會在快照建立期間觸發中繼儲存點。對於 Flink 版本 1.15 或更高版本,中繼儲存點不會再造成任何副作用。請參閱觸發儲存
自動建立的快照具有下列特質:
-
快照由服務管理,但您可以使用 ListApplicationSnapshots動作查看快照集。自動建立的快照會根據您的快照限制計數。
-
如果您的應用程式超過快照限制,手動建立的快照將會失敗,但 Managed Service for Apache Flink 服務在應用程式更新、擴展或停止時仍會成功建立快照。您必須先使用動 DeleteApplicationSnapshot作手動刪除快照,才能手動建立更多快照。
從包含不相容狀態資料的快照還原
由於快照包含運算子的資訊,因此從快照還原運算子的狀態資料 (自上一應用程式版本以來已變更) 可能會產生非預期的結果。如果應用程式嘗試從不對應於目前運算子的快照還原狀態資料,應用程式將會發生錯誤。錯誤的應用程式將卡在 STOPPING
或 UPDATING
狀態。
若要允許應用程式從包含不相容狀態資料的快照還原,請true
使用UpdateApplication動作FlinkRunConfiguration將的AllowNonRestoredState
參數設定為。
從過時的快照還原應用程式時,您會看到下列行為:
新增運算子:如果新增了新的運算子,則儲存點沒有該新運算子的狀態資料。不會發生任何錯誤,並且不必設定
AllowNonRestoredState
。刪除運算子:如果現有的運算子被刪除,則儲存點會有該遺失運算子的狀態資料。除非將
AllowNonRestoredState
設定為true
,否則會發生錯誤。修改運算子:如果進行了相容的變更,例如將參數類型變更為相容類型,應用程式就可以從過時的快照還原。如需有關從快照還原的詳細資訊,請參閱 Apache Flink 文件中的儲存點
。使用 Apache Flink 1.8 版或更新版本的應用程式可能可以從具有不同結構描述的快照還原。使用 Apache Flink 1.6 版的應用程式無法還原。對於 two-phase-commit 接收器,我們建議使用系統快照 (SWs),而不是使用者建立的快照 (CreateApplicationSnapshot)。 對於 Flink,Managed Service for Apache Flink 會在快照建立期間觸發中繼儲存點。對於 Flink 版本 1.15 以上版本,中繼儲存點不會再造成任何副作用。請參閱觸發儲存點
。
如果您需要恢復與現有儲存點資料不相容的應用程式,建議您將StartApplication動作的ApplicationRestoreType
參數設定為,以略過從快照還原。SKIP_RESTORE_FROM_SNAPSHOT
如需 Apache Flink 如何處理不相容狀態資料的詳細資訊,請參閱《Apache Flink 文件》中的狀態結構描述演進
檢閱快照API範例
本節包括將快照與應用程式搭配使用的API動作要求範例。若要取得有關如何使用JSON檔案進API行動作輸入的資訊,請參閱〈〉Managed Service for Apache Flink API範例程式碼。
啟用應用程式的快照
UpdateApplication
動作的下列請求範例可為應用程式啟用快照:
{ "ApplicationName": "MyApplication", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationSnapshotConfigurationUpdate": { "SnapshotsEnabledUpdate": "true" } } }
建立快照
CreateApplicationSnapshot
動作的下列範例請求可建立目前應用程式狀態的快照:
{ "ApplicationName": "MyApplication", "SnapshotName": "MyCustomSnapshot" }
列出應用程式的快照
ListApplicationSnapshots
動作的下列範例請求會列出目前應用程式狀態的前 50 個快照:
{ "ApplicationName": "MyApplication", "Limit": 50 }
列出應用程式快照的詳細資訊
DescribeApplicationSnapshot
動作的下列請求範例會列出特定應用程式快照的詳細資訊:
{ "ApplicationName": "MyApplication", "SnapshotName": "MyCustomSnapshot" }
刪除快照
DeleteApplicationSnapshot
動作的下列請求範例會刪除先前儲存的快照。您可以使用 ListApplicationSnapshots
或 DeleteApplicationSnapshot
取得 SnapshotCreationTimestamp
值:
{ "ApplicationName": "MyApplication", "SnapshotName": "MyCustomSnapshot", "SnapshotCreationTimestamp": 12345678901.0, }
使用具名的快照重新啟動應用程式
StartApplication
動作的下列請求範例會使用特定快照中的已儲存狀態來啟動應用程式:
{ "ApplicationName": "MyApplication", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_CUSTOM_SNAPSHOT", "SnapshotName": "MyCustomSnapshot" } } }
使用最新的快照重新啟動應用程式
StartApplication
動作的下列請求範例會使用最新快照來啟動應用程式:
{ "ApplicationName": "MyApplication", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }
不使用快照重新啟動應用程式
StartApplication
動作的下列請求範例會在不載入應用程式狀態的情況下啟動應用程式,即使有快照也是如此:
{ "ApplicationName": "MyApplication", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "SKIP_RESTORE_FROM_SNAPSHOT" } } }