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

Kinesis Producer Library を使用した Amazon Kinesis Streams プロデューサーの開発

Amazon Kinesis Streams プロデューサーは、ユーザーデータレコードを Kinesis stream に配置するアプリケーションです(データ取り込みとも呼ばれます)。Kinesis Producer Library(KPL)を使用すると、プロデューサーアプリケーションの開発が簡素化され、開発者は Kinesis stream に対する優れた書き込みスループットを実現できます。

Amazon CloudWatch を使用して KPL をモニタリングできます。詳細については、「Amazon CloudWatch による Kinesis Producer Library のモニタリング」を参照してください。

KPL の役割

KPL は使いやすく、Kinesis stream への書き込みに役立つ、高度な設定が可能なライブラリです。これは、プロデューサーアプリケーションのコードと Kinesis Streams API アクション間の仲介として機能します。KPL は次の主要なタスクを実行します。

  • 自動的で設定可能な再試行メカニズムにより 1 つ以上の Kinesis stream へ書き込む

  • レコードを収集し、PutRecords を使用して、リクエストごとに複数シャードへ複数レコードを書き込む

  • ユーザーレコードを集約し、ペイロードサイズを増加させ、スループットを改善する

  • コンシューマーで Kinesis Client Library(KCL)とシームレスに統合して、バッチ処理されたレコードを集約解除する

  • Amazon CloudWatch メトリクスをユーザーに代わって送信し、プロデューサーのパフォーマンスを確認可能にする

KPL は AWS SDK で使用できる Kinesis Streams API とは異なることに注意してください。Kinesis Streams API は Kinesis Streams の多くの要素(ストリームの作成、リシャーディング、レコードの入力と取得など)を管理するのに役立ちます。一方、KPL はデータの取り込みに特化した抽象化層を提供します。Kinesis Streams API の詳細については、Amazon Kinesis API Reference を参照してください。

KPL を使用するメリット

Kinesis Streams プロデューサーを開発するために KPL を使用するいくつかの主な利点を次のリストに示します。

KPL は、同期または非同期のユースケースで使用できます。同期動作を使用する特別な理由がないかぎり、非同期インターフェイスの優れたパフォーマンスを使用することを推奨します。これら 2 つのユースケースの詳細とコード例については、「KPL を使用した Kinesis Streams ストリームへの書き込み 」を参照してください。

パフォーマンスのメリット

KPL は、高性能のプロデューサーの構築に役立ちます。Amazon EC2 インスタンスをプロキシとして、100 バイトのイベントを数百または数千の低電力デバイスから収集し、レコードを Kinesis stream に書き込む状況を考えてみます。これらの EC2 インスタンスはそれぞれ、毎秒数千イベントを Kinesis stream に書き込む必要があります。必要なスループットを実現するには、お客様の側で、再試行ロジックとレコード集約解除に加え、バッチ処理やマルチスレッドなどの複雑なロジックをプロデューサーに実装する必要があります。KPL が、これらのタスクをすべて実行します。

コンシューマー側の使いやすさ

コンシューマー側の開発者が Java で KCL 使用する場合、追加作業なしで KPL が統合されます。KCL で、複数の KPL ユーザーレコードで構成されている集約された Kinesis Streams レコードを取得するときは、自動的に KPL が呼び出され、個々のユーザーレコードが抽出され、ユーザーに返されます。

KCL を使用せずに API オペレーション GetRecords を直接使用するコンシューマー側の開発者の場合、KPL Java ライブラリを使用して個々のユーザーレコードを抽出してから、それらのレコードをユーザーに返すことができます。

プロデューサーのモニタリング

Amazon CloudWatch と KPL を使用して、Kinesis Streams プロデューサーを収集、モニタリング、分析できます。KPL は、スループット、エラー、およびその他のメトリクスをユーザーに代わって CloudWatch に送信し、ストリーム、シャード、またはプロデューサーレベルでモニタリングするように設定できます。

非同期アーキテクチャ

KPL は、レコードを Kinesis Streams に送信する前にそれらのレコードをバッファ処理する場合があるため、実行を続行する前にレコードがサーバーに到着したことを確認するために、発信者アプリケーションを強制的にブロックし待機させることはしません。レコードを KPL に配置する呼び出しは、必ずすぐに処理が戻り、レコードの送信やサーバーからの応答の受信を待ちません。代わりに、レコードを Kinesis Streams に送信した結果を後で受信するための Future オブジェクトが作成されます。これは、AWS SDK の非同期クライアントと同じ動作です。

KPL の使用が適さない場合

KPL では、ライブラリ内で最大 RecordMaxBufferedTime まで追加の処理遅延が生じる場合があります(ユーザーが設定可能)。RecordMaxBufferedTime の値が大きいほど、パッキング効率とパフォーマンスが向上します。この追加的な遅延を許容できないアプリケーションは、AWS SDK を直接使用することが必要になる場合があります。AWS SDK を Kinesis Streams と組み合わせて使用する方法については、「Amazon Kinesis Streams API と AWS SDK for Java を使用した Amazon Kinesis Streams プロデューサーの開発」を参照してください。RecordMaxBufferedTime などの KPL のユーザー設定可能なプロパティの詳細については、「KPL の設定」を参照してください。