AWS Kinesis の書き込みスループットは、1000 回の書き込み/秒と 1MB/書き込み秒というかなり低いものです。Kinesis はこの制限をどのように適用しますか? 1 秒間に 1500 回の書き込みを試みた場合、余分な 500 回の書き込みは何らかのキューに入れられるのでしょうか、それとも単に失敗するのでしょうか?
2 に答える
これは、データの書き込み方法によって異なります。
PutRecordを使用している場合、制限を超えるリクエストは失敗しProvisionedThroughputExceededException
、リクエストを再試行する必要があります。ただし、1 つのリクエストの往復時間は 20 ~ 30 ミリ秒程度であるため、調整するには多数のクライアントが必要になります。
PutRecords呼び出しは、1 回の要求で最大 500 レコードを送信できるため、スロットリングされる可能性がはるかに高くなります。また、スロットリングされている場合、スロットリングはリクエスト全体またはリクエスト内の個々のレコードに影響を与える可能性があります (これは、あるシャードがレコードを受け入れ、別のシャードが受け入れない場合に発生する可能性があります)。
これに対処するには、応答Records
からリストを調べる必要があります。この配列はリクエストからのリストPutRecords
と正確に一致しますが、値が含まれています。Records
PutRecordsResultEntry
エントリに が含まれていればSequenceNumber
問題ありません。そのレコードはシャードに書き込まれています。ただし、 がある場合はErrorCode
、要求からレコードをコピーして再送信する必要があります (エラー コードがスループットを超えていると仮定します。内部エラーの場合は再送信を試みることもできますが、うまくいかない場合があります)。
PutRecords
ループして、応答に未送信のメッセージがなくなるまで呼び出す必要があります。
個々のレコードが調整されて再送信される可能性があるため、レコードがシャードに表示される順序を保証できないことに注意してください (レコードは受信された順序でシャードに格納されます)。