チェックポイントおよびセーブポイントのタイムアウトは、チェックポイント処理の以下の 2 つのフェーズのいずれかで発生します:遅いバリア配置(同期フェーズ)または遅いステートアップロード(非同期フェーズ)。本トピックでは、ボトルネックとなるフェーズを特定する方法と、適切なチューニング手法を適用する方法について説明します。
チェックポイントのフェーズ
Realtime Compute for Apache Flink は、ステート管理のために Chandy-Lamport アルゴリズムを採用しており、データ整合性および信頼性を確保します。すべてのチェックポイントおよびセーブポイントは、以下の 2 つのフェーズを経ます:
同期フェーズ — システムは、オペレーター間でバリアが配置されるのを待機します。バリアは、オペレーター間で渡される特殊なタイプのデータレコードです。バリア配置に要する時間は、データレコードの到着遅延に比例します。
非同期フェーズ — 各オペレーターは、そのローカルステートをリモートの永続ストレージシステムにアップロードします。アップロード時間は、ステートサイズに比例します。
バックプレッシャーは、同期フェーズにおけるバリア伝搬を遅くし、直接的にチェックポイントおよびセーブポイントのタイムアウトを引き起こします。タイムアウトの問題を調査する前に、まずバックプレッシャーを解消してください。詳細については、「SQL デプロイメントにおけるバックプレッシャー低減のためのステートサイズ制御」および「DataStream API を使用したバックプレッシャー低減のためのステートサイズ制御」をご参照ください。
ボトルネックフェーズの特定
バックプレッシャーを解消した後も、チェックポイントまたはセーブポイントが依然としてタイムアウトする場合は、以下のツールを使用して、ボトルネックが同期フェーズか非同期フェーズのどちらにあるかを特定します。
チェックポイント履歴 UI
O&M > デプロイメント に移動し、対象のデプロイメント名をクリックした後、ログ > チェックポイント > チェックポイント履歴 に進みます。このビューでは、デプロイメントレベル、オペレーターレベル、サブタスクレベルのメトリックを確認できます。

チェックポイントがタイムアウトしている、または進行中のオペレーターを特定し、以下のメトリックを確認します:
| メトリック | 説明 |
|---|---|
| Sync Duration | 同期フェーズに要した合計時間(オペレーターのステートスナップショット取得を含む)。 |
| Alignment Duration | 最初のチェックポイントバリアと最後のチェックポイントバリアの処理間の時間。値が高い場合、入力チャンネル間でのデータ分布が不均一である可能性があります。 |
| Async Duration | リモートストレージへのステートアップロードに要した時間。 |
| Checkpointed Data Size | チェックポイント実行時に書き込まれたステートデータの容量。 |
結果の解釈方法:
Sync Duration または Alignment Duration が大きい場合 — ボトルネックは同期フェーズにあります。バリアがジョブグラフ内を遅く移動しており、これは残存するバックプレッシャーまたはチャンネルの偏りが原因である可能性があります。
Async Duration または Checkpointed Data Size が大きい場合 — ボトルネックは非同期フェーズにあります。ステートが大きすぎて、タイムアウトウィンドウ内でアップロードできない状態です。
チェックポイントメトリック
「[運用・保守] > [デプロイメント]」に移動し、対象のデプロイメント名をクリックしてから、「[ログ]」タブに移動し、「[アラーム]」をクリックします。lastCheckpointDuration および lastCheckpointSize メトリックは、過去のチェックポイントのパフォーマンスを粗い粒度で示すものであり、時間経過に伴う傾向の把握に役立ちます。
チェックポイントおよびセーブポイントのパフォーマンスチューニング
任意のチューニング手法を適用する前に、デプロイメントのランタイムパフォーマンスが期待通りであることを確認してください。ランタイムパフォーマンスが劣ると、チェックポイントの問題が悪化します。ランタイムパフォーマンスの最適化を完了した後、ボトルネックフェーズに応じて、以下の手法の 1 つ以上を適用します。
これらの手法は相互排他ではありません。両方のフェーズでボトルネックが発生している場合は、複数の手法を組み合わせて適用してください。
非整列チェックポイントおよびバッファデブローリングの使用
| プロパティ | 詳細 |
|---|---|
| 適用タイミング | 同期フェーズが原因でチェックポイントまたはセーブポイントのタイムアウトが発生している場合 |
| 効果 | バリア配置の必要性を排除し、遅いまたは偏ったバリアに関連するタイムアウト問題を解決します。あらゆる規模のデプロイメントに有効です。 |
| 構成 | Apache Flink ドキュメントの「バックプレッシャー下でのチェックポイント処理」をご参照ください。 |
非整列チェックポイントには特定の制限事項があります。この機能を有効化する前に、Apache Flink ドキュメントの「制限事項」セクションをご確認ください。
並列度の増加
| プロパティ | 詳細 |
|---|---|
| 適用タイミング | 非同期フェーズが原因でチェックポイントまたはセーブポイントのタイムアウトが発生している場合 |
| 効果 | ステートデータをより多くの並列タスクに分散させることで、非同期フェーズにおける各タスクのアップロードデータ量を削減します。 |
| 構成 | リソース構成の基本モードまたはエキスパートモードを使用して並列度を調整します。「デプロイメントのリソース構成」をご参照ください。 |
セーブポイントのネイティブフォーマットの使用
| プロパティ | 詳細 |
|---|---|
| 適用タイミング | 非同期フェーズが原因でセーブポイントのタイムアウトが発生している場合 |
| 効果 | ネイティブフォーマットは、標準フォーマットと比較して、セーブポイントの生成速度が速く、ストレージ領域の消費量も少ないです。 |
| 構成 | 実行中のデプロイメントに対して、ネイティブフォーマットでセーブポイントを作成します。「ステータスセット管理」の「手動によるセーブポイントの作成」セクションをご参照ください。 |
ネイティブフォーマットのセーブポイントは、メジャーバージョン間の互換性を保証しません。クロスバージョン互換性が必要な場合は、代わりに標準フォーマットを使用してください。
リファレンス
大規模ステートデプロイメントのパフォーマンスチューニング — 大規模なステートサイズが原因で発生する問題および全体的なチューニングワークフローについて説明します。
SQL デプロイメントにおけるバックプレッシャー低減のためのステートサイズ制御 — Flink SQL オプティマイザーがステートフルオペレーターを選択する仕組み、および大規模データセットに対するステートフル計算のチューニング方法について説明します。
DataStream API を使用したバックプレッシャー低減のためのステートサイズ制御 — DataStream API を用いた柔軟なステートサイズ管理について説明します。
起動およびスケーリング速度の向上 — チェックポイントまたはセーブポイントからデプロイメントを再起動する際、ステートデータはリモートストレージからダウンロードされ、ステートエンジンの復元に使用されます。このプロセスが効率ボトルネックとなることがあります。デプロイメントの起動およびスケーリング時のパフォーマンスボトルネックを特定・解消するためのガイダンスについては、本トピックをご参照ください。