Kinesis Data Streams でレイテンシーが高くなる問題が発生するのはなぜですか?

最終更新日: 2020 年 6 月 4 日

Amazon Kinesis データストリームでデータレコードの取得中に高いレイテンシーが発生しています。この理由は何ですか? この問題をトラブルシューティングする方法を教えてください。

簡単な説明

GetRecords.Latency の増大は、GET リクエストごとにレコード数またはレコードサイズが増加した場合に発生する可能性があります。プロデューサーがストリームにデータを取り込むときにアプリケーションを再起動しようとすると、レコードは消費されずに蓄積されます。取得するレコード数またはデータ量が増加すると、 GetRecords.Latency の値が大きくなります。さらに、アプリケーションが取り込みレートに追いつくことができない場合、IteratorAge が増加します。

注意: Kinesis データストリームでサーバー側の暗号化を有効にすると、レイテンシーも増加する可能性があります。

解決方法

Amazon CloudWatch による Amazon Kinesis Data Streams サービスのモニタリングGetRecords.Latency などの CloudWatch メトリクスをチェックして、レイテンシーの増加が継続的であるかどうかを確認します。レイテンシーの増加が継続的に発生する場合は、CloudWatch の IncomingRecordsIncomingBytesGetRecords.Records、および GetRecords.Bytes メトリクスも増加しているかどうかを確認します。データボリュームが増加すると、これらのメトリクスも増加し、レイテンシーが高くなります。この増加は、Kinesis データストリームで使用できるレコードが増えると、GetRecords がより多くのレコードを取得するために発生します。

IteratorAge も増加した場合、ストリームに入力される IncomingBytes が増える可能性があります。CloudWatch の IncomingBytes メトリクスを調べて、バイト数が増加したかどうかを確認します。また、ストリームに対する GetRecords 呼び出しが少なくなったかどうかを確認することもできます。受信バイト数が多いほど、各 GetRecords 呼び出しがより多くのデータを取得していることを示し、 GetRecords.Latency の値が増加します。

IncomingBytes または IncomingRecordsが増加していなくても、高いレイテンシーが引き続き発生する場合は、受信データが多すぎる可能性があります。コンシューマーアプリケーションが受信データに追いつくことができない場合、データは Kinesis データストリームに蓄積され続けます。アプリケーションを再起動しても、 GetRecords 呼び出しごとにフェッチされるレコードが増えます。GetRecords 呼び出しごとにレコードまたはフェッチされたデータが増加すると、GetRecords.Latency の値が増加します。

このエラーを解決するには、次のトラブルシューティング手順を試してください。

  • アプリケーションをチェックして、受信データのボリュームを処理するために十分な GetRecords 呼び出しが行われているかどうかを確認します。Amazon Kinesis クライアントライブラリ (KCL) アプリケーションまたは AWS Lambda をコンシューマーとして使用している場合は、ストリーム内のシャードの数を増やします。シャード数が増加すると、配信ストリームの消費率が増加する一方、IteratorAgeGetRecords.Latency の値が減少します。
  • データの損失を防ぐには、Kinesis データストリームの保持期間を延長してください。保持期間が長くなると、アプリケーションはデータバックログに追いつくのに役立ちます。
  • 独自のコンシューマーアプリケーションがある場合は、処理ロジックを確認し、処理時間を記録します。
  • システムの中央処理ユニット (CPU) とメモリ使用率を調べて、より多くのメモリを解放する必要があるかどうかを確認します。

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

改善できることはありますか?


さらにサポートが必要な場合