このトピックでは、チェックポイントとセーブポイントのタイムアウトを診断および防止する方法について説明します。
背景情報
Apache Flink は、Chandy-Lamport アルゴリズムを使用して、状態管理を容易にし、データの整合性と信頼性を確保します。チェックポイントまたはセーブポイントの実行には、次の 2 つのフェーズが含まれます。
同期フェーズ: このフェーズでは、システムはバリアが揃うのを待ち、必要なリソースを維持します。バリアは、オペレーター間で渡すことができる特殊なタイプのデータレコードです。バリア調整に必要な時間は、データレコードの到着遅延に比例します。
非同期フェーズ: このフェーズでは、オペレーターはローカル状態をリモートの永続ストレージシステムにアップロードします。アップロード時間は、状態サイズに比例します。
バックプレッシャーは、同期フェーズでの実行速度を低下させ、チェックポイントとセーブポイントのタイムアウトを引き起こします。チェックポイントとセーブポイントのタイムアウトの問題に対処する前に、バックプレッシャーが除去されていることを確認してください。 詳細については、「SQL デプロイでのバックプレッシャーを軽減するための状態サイズの制御」および「DataStream API を使用したバックプレッシャーを軽減するための状態サイズの制御」をご参照ください。 これにより、効率と安定性が向上します。
診断ツール
バックプレッシャーの問題を解決した後もチェックポイントとセーブポイントがタイムアウトする場合は、同期フェーズでの調整時間と非同期フェーズでのアップロード時間を分析します。
チェックポイント UI
ページで、管理するデプロイメントを見つけ、その名前をクリックします。 表示されるページで、[ログ] タブをクリックし、 を選択します。 デプロイメントレベル、オペレーターレベル、およびサブタスクレベルのメトリックを表示して、タイムアウトの原因を分析できます。

チェックポイントがタイムアウトしたオペレーター、または実行中のオペレーターをメモし、次のメトリックを監視します。
同期期間と調整期間: これらのメトリックの値が高い場合は、ボトルネックが同期フェーズにあることを示します。
非同期期間とチェックポイント済みデータサイズ: これらのメトリックの値が高い場合は、ボトルネックが非同期フェーズにあることを示します。
チェックポイントメトリック
ページで、管理するデプロイを見つけ、その名前をクリックします。 表示されるページの [ログ] タブで、[アラーム] タブをクリックします。 lastCheckpointDuration メトリックと lastCheckpointSize メトリックを表示して、履歴チェックポイントの時間消費とサイズを粗く分析できます。
チューニング方法
パフォーマンスチューニングを行う前に、ランタイムパフォーマンスが期待どおりであることを確認してください。 ランタイムパフォーマンスが低い場合は、最適化ガイドラインに基づいてランタイムパフォーマンスを調整する必要があります。 ランタイムパフォーマンスを最適化した後、チェックポイントとセーブポイントの生成効率を向上させることができます。 次の表に、方法を示します。
方法 | 説明 | シナリオ | 構成 | 使用上の注意 |
非アラインチェックポイントとバッファデブロートを使用する | この方法は、調整に関連するタイムアウトの問題を効果的に解決し、あらゆる規模のデプロイに適しています。 | 同期フェーズでのチェックポイントとセーブポイントのタイムアウト | パラメーターの構成方法の詳細については、「バックプレッシャー下でのチェックポイント」をご参照ください。 | 関連する使用上の注意の詳細については、「制限事項」をご参照ください。 |
並列度を上げる | この方法は、各並列タスクの状態データ量を減らして、非同期フェーズを高速化します。 | 非同期フェーズでのチェックポイントとセーブポイントのタイムアウト | リソース構成の基本モードまたはエキスパートモードを使用します。 詳細については、「デプロイのリソースを構成する」をご参照ください。 | 該当なし |
セーブポイントにネイティブ形式を使用する | 標準形式と比較して、ネイティブ形式は生成が速く、ストレージ容量の消費が少ないです。 | 非同期フェーズでのセーブポイントのタイムアウト | 実行中のデプロイのセーブポイントをネイティブ形式で作成します。 詳細については、「状態セット管理」トピックの「セーブポイントを手動で作成する」セクションをご参照ください。 | メジャーバージョン間の互換性は保証されていません。 |
参考資料
状態サイズが大きいことによって発生する問題とチューニングワークフローについては、「大規模状態デプロイのパフォーマンスチューニング」をご参照ください。
Flink SQL は、オプティマイザーを使用して、パラメーター構成と SQL ステートメントに基づいてステートフルオペレーターを選択します。 大量のデータに対するステートフル計算のパフォーマンスを最適化するには、基礎となるメカニズムの基本的な理解が必要です。 詳細については、「SQL デプロイでのバックプレッシャーを軽減するための状態サイズの制御」をご参照ください。
Apache Flink Datastream API を使用すると、状態サイズを柔軟に管理できます。 詳細については、「Datastream API を使用したバックプレッシャーを軽減するための状態サイズの制御」をご参照ください。
チェックポイントまたはセーブポイントに基づいてデプロイを再起動すると、状態データがリモートストレージからダウンロードされて状態エンジンが復元されます。 このプロセスは効率のボトルネックになる可能性があり、大きな遅延が発生する可能性があります。 デプロイの起動時およびスケーリング時のパフォーマンスボトルネックを特定して除去する方法については、「起動とスケーリングの速度を向上させる」をご参照ください。