Amazon Kinesis Data Analytics アプリケーションのチェックポイントが失敗するのはなぜですか?

最終更新日: 2022 年 2 月 25 日

Amazon Kinesis Data Analytics アプリケーションのチェックポイントまたはセーブポイントが失敗します。

簡単な説明

チェックポイントは、Apache Flink 用 Amazon Kinesis Data Analytics で耐障害性を実装するために使用される方法です。アプリケーションが最適化されていないか、適切にプロビジョニングされていないと、チェックポイントが失敗する可能性があります。

チェックポイント障害の主な原因には、次のようなものがあります。

  • Rocks DB の場合、Apache Flink はローカルストレージからファイルを読み取り、リモートの永続的ストレージ、つまり Amazon Simple Storage Service (Amazon S3) に書き込みます。ローカルディスクのパフォーマンスとアップロード速度がチェックポイントに影響し、チェックポイントが失敗する可能性があります。
  • セーブポイントとチェックポイントの状態は、AWS フルマネージドサービス所有の Amazon S3 バケットに保存されます。これらの状態は、アプリケーションがフェイルオーバーするたびにアクセスされます。この S3 バケットで一時的なサーバーエラーまたはレイテンシーが発生すると、チェックポイント障害が発生する可能性があります。
  • チェックポイント中に関数が Amazon DynamoDB などの外部リソースと通信する場所で作成したプロセス関数では、チェックポイントが失敗することがあります。
  • シリアライザと受信データとの不一致など、状態のシリアル化による障害は、チェックポイント障害の原因になることがあります。
  • アプリケーションにプロビジョニングされた Kinesis プロセッシングユニット (KPU) の数が十分でない可能性があります。割り当てられた KPU を見つけるには、次の計算を使用します。
    アプリケーションに割り当てられた KPU = Parallelism / ParallelismPerKPU
  • アプリケーション状態のサイズが大きくなると、チェックポイントレイテンシーが増加する可能性があります。これは、タスクマネージャーがチェックポイントの保存に時間がかかり、メモリ不足の例外が発生する可能性があるためです。
  • 状態の分散が歪んでいると、あるタスクマネージャーが他のタスクマネージャーよりも多くのデータを処理する可能性があります。十分な KPU (リソース) がプロビジョニングされている場合でも、1 つ以上のタスクマネージャーが過負荷になると、メモリ不足の例外が発生する可能性があります。
  • カーディナリティが高い場合は、受信データに一意のキーが多数存在することを示します。ジョブが受信データのパーティション化に KeyBy 演算子を使用し、データがパーティション化されるキーのカーディナリティが高い場合、チェックポイントが遅くなることがあります。これにより、最終的にチェックポイントに障害が発生する可能性があります。

解決方法

  • アプリケーションの状態のサイズが急激に増加し、チェックポイントのサイズと期間が増大することがあります。これらの値は、Amazon CloudWatch メトリクスの lastCheckpointDuration および lastCheckpointSize を使用してモニタリングできます。詳しくは、「アプリケーションメトリクス」を参照してください。
  • より多くのデータを処理する演算子の並列処理を増やします。setParallelism () メソッドを呼び出すことで、個々の演算子、データソース、またはデータシンクの並列処理を定義できます。
  • KPU の使用率を最適化するために、Parallelism と ParallelismPerKPU の値を調整します。Amazon Kinesis Data Analytics アプリケーションの自動スケーリングがオフになっていないことを確認してください。maxParallelism パラメータの値により、希望する KPU 数にスケーリングできます。詳細については、「Apache Flink 用 Kinesis Data Analytics におけるアプリケーションのスケーリング」を参照してください。
  • 状態で TTL を定義して、状態が定期的に消去されるようにします。
  • より良いパーティショニング戦略を可能にするために、コードを最適化します。再分散パーティショニングを使用すると、データを均等に分散できます。この方法では、分散にラウンドロビン方式が使用されます。
  • コードを最適化してウィンドウサイズを縮小し、そのウィンドウ内のキー数のカーディナリティが減少するようにします。

この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?