Amazon Kinesis データストリームがスロットリングされている理由を知りたいです。
簡単な説明
メトリクスが Kinesis Data Streams クォータの範囲内であっても、以下の理由でストリームがスロットリングされることがあります。
- ProvisionedThroughputExceededException または LimitExceededException のいずれかのエラーコードが返される。詳細については、API の制限を参照してください。
- 拡張 Kinesis ストリームモニタリングが無効になっている。
- Amazon CloudWatch メトリクスでマイクロスパイクが表示されなくなっている。
- CloudWatch メトリクスは成功したオペレーションについてのみ報告し、失敗したオペレーションは除外する。
解決策
ProvisionedThroughputExceededException または LimitExceededException のいずれかのエラーコードが返される
GetRecords または PutRecords API を使用すると、ストリームで ProvisionedThroughputExceededException または LimitExceededException というスロットリングエラーが発生することがあります。
次のシナリオでもこれらのエラーが発生する可能性があります。
- Kinesis ストリームに書き込まれたレコードの数がストリームのクォータを超過している。
- レコード (パーティションキーを含む) のサイズが 1 MB を超過している。
- 合計スループット (バイト) が Kinesis ストリームの制限を超過している。
- プロデューサーが実行している高速リクエストが多すぎてストリームに書き込むことができない。通常、「Slow down」または「Rate exceeded」というエラーが発生。
また、分単位のデータポイントから値を取得して 60 で割ることもできます。これにより、1 秒あたりの平均値が得られ、特定の時間内にスロットリングが発生しているかどうかを判断するのに役立ちます。成功回数がクォータを超えていない場合は、IncomingRecords メトリクスを WriteProvisionedThroughputExceeded メトリクスに追加して、計算を再試行します。**IncomingRecords ** メトリクスは、レコードが成功または承認されたことを示します。WriteProvisionedThroughputExceeded メトリクスは、スロットルされたレコード数を示します。
**注:**プロデューサーから送信されるレコードのサイズと数を確認してください。受信レコードとスロットルされたレコードの合計がストリームクォータを超える場合は、レコードのサイズまたは数を変更します。
PutRecord または PutRecord.Success メトリクスは、失敗した操作も示します。Success メトリクスが低下したら、データプロデューサーのログを見直し、失敗の根本原因を見つけます。スロットリングが発生した場合は、データプロデューサ側でロギングを設定して、送信されたレコードの合計数とサイズを確認します。PutRecord.Success または **PutRecords.Success ** メトリクスのレコードの合計数がストリームクォータを超えると、Kinesis ストリームがスロットルされます。
無効になっている拡張 Kinesis ストリームモニタリング
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用しているようにしてください。
Kinesis ストリームの一部のシャードは、他のシャードよりも多くのレコードを受信する場合があります。分散が不均一な場合、スロットリングエラーが発生し、ホットシャードが発生する可能性があります。ホットシャードは、PUT オペレーションで使用されているパーティションキーが Kinesis ストリームのシャード間でレコードを均等に分散していないことを示しています。
拡張モニタリングを無効にすると、ストリームレベルのメトリクスがすべてのシャードで集計されるため、ホットシャードがメトリクスに表示されなくなる可能性があります。ストリームの拡張モニタリングを無効になっていると、ストリームを個別に調べることはできません。シャードごとにストリームを調べるには、enable-enhanced-monitoring コマンドを実行します。
また、IncomingBytes の平均値と最大値を比較して、ストリームにホットシャードがあるかどうかを確認することもできます。拡張モニタリングを有効にすると、平均値から逸脱しているシャードも確認できます。詳細については、Strategies for resharding を参照してください。
ランダムなパーティションキーを使用する
Kinesis ストリームにホットシャードがある場合は、ランダムなパーティションキーを使用してレコードをグループ化します。オペレーションですでにランダムなパーティションキーを使用している場合は、キーを調整して分散を修正します。次に、IncomingBytes や IncomingRecords などのメトリクスの変化についてキーをモニタリングします。最大パターンと平均パターンが近い場合、ホットシャードはありません。
CloudWatch メトリクスにおけるマイクロスパイクの非表示
ストリームクォータを超えるマイクロスパイクやメトリクスを特定するには、全レコードまたはカスタムコードをログに記録してストリーム数をカウントし、レコードサイズを確認します。次に、Kinesis ストリームに送信されるレコードの数とサイズを評価して、データクォータを超えるスパイクを特定します。
Kinesis データストリームのクォータは、シャードごとおよび 1 秒ごとに決定されます。CloudWatch で 60 秒の制限時間を超えて値が集計されると、Kinesis データストリームのクォータを超えるマイクロスパイクが発生する可能性があります。また、メトリクスは 60 秒間集計されるため、1 分以内のレコードの合計数が少なく見える場合があります。ただし、1 分間の任意の秒数が記録された場合は、その数値は大きくなります。トラフィックによってストリームクォータを下回っていることが示されている場合でも、その秒数以内にスロットリングされたシャードは、ストリームではスロットリング中と表示されます。
CloudWatch メトリクスがクォータ例外やデータのマイクロスパイクを示していない場合は、次のタスクを実行します。
成功したオペレーションについてのみ報告し、失敗したオペレーションは除外する CloudWatch メトリクス
Kinesis メトリクスは、ストリームの成功したオペレーションのみを記録します。スロットリングされたオペレーションの中には Kinesis ストリームに取り込まれないものもあります。その後、ストリームクォータを超えますが、メトリクスには例外は示されません。
Kinesis データストリームに入力できない失敗のレコードが発生すると、ストリームがスロットリングされます。プロデューサーに再試行メカニズムがある場合、失敗のレコードが再試行されます。その場合、処理に遅延が発生することがあります。
Kinesis ストリームに送信されるレコードが多すぎるかどうかを確認するには、受信レコードの合計数をスロットルされたレコードの数に加算します。
関連情報
Developing custom consumers with dedicated throughput (enhanced fan-out)
Monitoring the Amazon Kinesis Data Streams Service with Amazon CloudWatch
disable-enhanced-monitoring