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

所要時間1分
0

データレコードの取得中に Amazon Kinesis Data Streams のレイテンシーが高くなる理由を教えてください。

簡単な説明

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

**注:**Kinesis データストリームでサーバー側の暗号化を有効にすると、待ち時間が長くなる可能性があります。

解決策

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

IteratorAge ** が増加すると、ストリームに送られるIncomingBytes** も増える可能性があります。CloudWatch の IncomingBytes メトリクスをチェックして、バイト数が増加しているかどうか確認します。ストリームに対して行われる GetRecords 呼び出しが少ないかどうかチェックできます。受信バイト数が多いほど、各 GetRecords 呼び出しで取得されるデータが増え、GetRecords.Latencyの値が増えます。

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

この問題を解決するには、次のステップを実行してください。

  • アプリケーションをチェックして、大量の受信データを処理するのに十分な GetRecords 呼び出しが行われているかどうかを確認してます。Amazon Kinesis クライアントライブラリ (KCL) アプリケーションまたは AWS Lambda をコンシューマーとして使用する場合は、ストリーム内のシャードの数を増やしてください。シャード数を増やすと配信ストリームからの消費率が増加し、IteratorAgeGetRecords.Latency の値が減ります。
  • Kinesis データストリームの保持期間を長くすると、データが失われなくなります。これは、アプリケーションがデータバックログに追いつくのに役立ちます。
  • コンシューマーアプリケーションを使用している場合は、処理ロジックを確認して処理時間を記録します。
  • システムの中央処理装置 (CPU) とメモリ使用率をチェックして、さらにメモリを解放する必要があるかどうかを確認してください。
AWS公式
AWS公式更新しました 4ヶ月前
コメントはありません

関連するコンテンツ