Amazon Kinesis Data Streams
開発者ガイド

低レイテンシー処理

伝達遅延は、レコードがストリームに書き込まれた瞬間からコンシューマーアプリケーションによって読み取られるまでの、エンドツーエンドのレイテンシーとして定義されます。この遅延はいくつかの要因によって異なりますが、最も大きく影響するのはコンシューマーアプリケーションのポーリング間隔です。

ほとんどのアプリケーションについては、アプリケーションごとに各シャードを 1 秒に 1 回ポーリングすることをお勧めします。この設定では、Amazon Kinesis Data Streams の制限(1 秒あたり 5 回の GetRecords 呼び出し)を超えることなく、複数のコンシューマーアプリケーションで同時に 1 つのストリームを処理することができます。さらに、処理するデータバッチが大きくなると、アプリケーション内でネットワークおよび他の下流レイテンシーを効率的に短縮できる可能性が高くなります。

KCL のデフォルト値は、毎秒のポーリングのベストプラクティスに従うよう設定されています。このデフォルト設定により、平均的な伝達遅延は通常、1 秒未満になります。

Kinesis Data Streams レコードは、書き込まれた後、すぐに読み取り可能になります。このことを利用し、ストリームが使用可能になったらすぐにストリームのデータ利用が必要になるユースケースもあります。次の例に示されているように、KCL のデフォルト設定を上書きしてポーリングの頻度を高くすると、伝達遅延を大幅に短縮できます。

Java KCL の設定コードを次に示します。

kinesisClientLibConfiguration = new KinesisClientLibConfiguration(applicationName, streamName, credentialsProvider, workerId).withInitialPositionInStream(initialPositionInStream).withIdleTimeBetweenReadsInMillis(250);

Python および Ruby KCL のプロパティファイル設定を次に示します。

idleTimeBetweenReadsInMillis = 250

注記

Kinesis Data Streams には、シャードごとに GetRecords を呼び出す回数として 1 秒あたり 5 回という上限があるため、idleTimeBetweenReadsInMillis プロパティを 200 ms 未満に設定すると、アプリケーションで ProvisionedThroughputExceededException 例外が発生する可能性があります。この例外の発生回数が多くなりすぎると、エクスポネンシャルバックオフにつながり、予期しない大幅なレイテンシーが処理中に生じることが考えられます。このプロパティを 200 ms または少し上に設定した場合も、複数の処理アプリケーションが実行されていれば、同様の調整が発生します。