データレコードの取得中に Amazon Kinesis Data Streams のレイテンシーが高くなる理由を教えてください。
簡単な説明
各 GET リクエストでレコード数またはレコードサイズが増加すると、GetRecords.Latency も増加する可能性があります。プロデューサーがストリームにデータを取り込んでいる間にアプリケーションを再起動すると、レコードが消費されずに蓄積されます。このように取得するデータ量またはレコード数が増加すると、GetRecords.Latency の値も増加します。アプリケーションが取り込み速度に追いつけない場合は、IterAtorage が増加します。
**注:**Kinesis データストリームでサーバー側の暗号化を有効にすると、待ち時間が長くなる可能性があります。
解決策
Amazon CloudWatch を使用して Kinesis データストリームサービスをモニタリングします。GetRecords.Latency などの CloudWatch メトリクスをチェックして、レイテンシーの増加が継続していないかどうかを確認します。レイテンシーの増加が継続している場合は、CloudWatch のIncomingRecords、IncomingBytes、** GetRecords.Records**、GetRecords.Bytesの各メトリクスも増加していないか確認してください。データ量が増えると、これらのメトリクスも増加してレイテンシーが高くなります。この増加は、Kinesis データストリームで利用可能なレコードが増えると、GetRecords がより多くのレコードを取得するために発生します。
IteratorAge ** が増加すると、ストリームに送られるIncomingBytes** も増える可能性があります。CloudWatch の IncomingBytes メトリクスをチェックして、バイト数が増加しているかどうか確認します。ストリームに対して行われる GetRecords 呼び出しが少ないかどうかチェックできます。受信バイト数が多いほど、各 GetRecords 呼び出しで取得されるデータが増え、GetRecords.Latencyの値が増えます。
(IncomingBytes や IncomingRecordが増えていなくても) 高レイテンシーが続く場合は、受信データが多すぎる可能性があります。コンシューマーアプリケーションが受信データに追いつけない場合、データは引き続き Kinesis データストリームに蓄積されます。アプリケーションを再起動しても、各 GetRecords 呼び出しでより多くのレコードが取得されます。各 GetRecords 呼び出しでレコードまたは取得データが増加すると、GetRecords.Latency の値も増加します。
この問題を解決するには、次のステップを実行してください。
- アプリケーションをチェックして、大量の受信データを処理するのに十分な GetRecords 呼び出しが行われているかどうかを確認してます。Amazon Kinesis クライアントライブラリ (KCL) アプリケーションまたは AWS Lambda をコンシューマーとして使用する場合は、ストリーム内のシャードの数を増やしてください。シャード数を増やすと配信ストリームからの消費率が増加し、IteratorAge と GetRecords.Latency の値が減ります。
- Kinesis データストリームの保持期間を長くすると、データが失われなくなります。これは、アプリケーションがデータバックログに追いつくのに役立ちます。
- コンシューマーアプリケーションを使用している場合は、処理ロジックを確認して処理時間を記録します。
- システムの中央処理装置 (CPU) とメモリ使用率をチェックして、さらにメモリを解放する必要があるかどうかを確認してください。