メニュー
Amazon Kinesis Data Streams
開発者ガイド

KPL の再試行とレート制限

KPL addUserRecord() オペレーションを使用して KPL ユーザーレコードを追加する場合、レコードにタイムスタンプが与えられ、RecordMaxBufferedTime 設定パラメータで期限が設定されたバッファにそのレコードが追加されます。このタイムスタンプと期限の組み合わせにより、バッファの優先順位が設定されます。レコードは、次の条件に基づいてバッファからフラッシュされます。

  • バッファの優先度

  • 集約設定

  • 収集設定

バッファの動作に影響を与える集約および収集の設定パラメータは次のとおりです。

  • AggregationMaxCount

  • AggregationMaxSize

  • CollectionMaxCount

  • CollectionMaxSize

さらに、フラッシュされたレコードは Kinesis Data Streams API オペレーション PutRecords への呼び出しを使用して、Amazon Kinesis Data Streams レコードとして Kinesis data stream に送信されます。PutRecords オペレーションはストリームにリクエストを送信しますが、すべての失敗または部分的な失敗を示す場合があります。失敗したレコードは、自動的に KPL バッファに戻されます。新しい期限は、次の 2 つの値のうち小さい方に基づいて設定されます。

  • 現在の RecordMaxBufferedTime 設定の半分

  • レコードの有効期限値

この戦略では、再試行する KPL ユーザーレコードをそれ以降の Kinesis Data Streams API 呼び出しに含めることができ、Kinesis Data Streams レコードの有効期限値を適用しながら、スループットを改善し、複雑さを減らすことができます。バックオフアルゴリズムがないため、これは比較的積極的な再試行戦略です。過剰な再試行による大量送信は、次のセクションで説明するレート制限により防止できます。

レート制限

KPL にはレート制限機能があり、1 つのプロデューサーからの送信されるシャード単位のスループットを制限できます。レート制限は、Kinesis Data Streams のレコードとバイトに別々のバケットを使用するトークンバケットアルゴリズムを使用して実装されています。Kinesis data stream への書き込みが成功するたびに、特定のしきい値に達するまで、各バケットに 1 つまたは複数のトークンが追加されます。このしきい値は設定できますが、デフォルトでは実際のシャード制限より 50% 大きく設定され、単一のプロデューサーによるシャードの飽和が許されています。

この制限を小さくすることにより、過剰な再試行による大量送信を抑制できます。ただし、ベストプラクティスは、各プロデューサーについて、最大スループットまで積極的に再試行することと、ストリームの容量を拡大し、適切なパーティションキー戦略を実装することにより、結果的に過剰と判断されたスロットリングを適切に処理することです。

このページの内容: