Amazon Kinesis Data Streams
開発者ガイド

Kinesis Client Library 1.x を使用したコンシューマーの開発

Kinesis Client Library (KCL) を使用して、Amazon Kinesis Data Streams のコンシューマーアプリケーションを開発できます。Kinesis Data Streams API を使用して Kinesis data stream からデータを取得することはできますが、KCL が提供するコンシューマーアプリケーションの設計パターンとコードを使用することをお勧めします。

Amazon CloudWatch を使用して KCL をモニタリングできます。詳細については、「Amazon CloudWatch による Kinesis クライアントライブラリのモニタリング」を参照してください。

Kinesis Client Library

Kinesis Client Library (KCL) では Kinesis data stream のデータを使用および処理できます。このタイプのアプリケーションは、コンシューマーとも呼ばれます。KCL は、分散コンピューティングに関連する多くの複雑なタスクを処理します。たとえば、複数のインスタンス間での負荷分散、インスタンスの障害に対する応答、処理済みのレコードのチェックポイント作成、リシャーディングへの対応が挙げられます。KCL を使用すれば、レコード処理のロジックの記述に集中することができます。

KCL は AWS SDK で使用できる Kinesis Data Streams API とは異なります。Kinesis Data Streams API では、Kinesis Data Streams の多くの機能 (ストリームの作成、リシャーディング、レコードの入力と取得など) を管理できます。KCL は、コンシューマーロールでのデータ処理専用の抽象化レイヤーを提供します。Kinesis Data Streams API の詳細については、Amazon Kinesis API Reference を参照してください。

KCL は Java ライブラリです。Java 以外の言語のサポートは、MultiLangDaemon という多言語インターフェイスを使用して提供されます。このデーモンは Java ベースで、Java 以外の KCL 言語を使用するときに実行されます。 たとえば、KCL for Python をインストールして、コンシューマーアプリケーションをすべて Python で書く場合でも、MultiLangDaemon を使用するために、Java をシステムにインストールする必要があります。さらに、MultiLangDaemon には、接続先の AWS リージョンなどの、ユースケースに合わせてカスタマイズする必要のあるデフォルト設定例があります。GitHub の MultiLangDaemon の詳細については「KCL MultiLangDaemon project」のページを参照してください。

KCL アプリケーションは、ランタイムに設定情報を使用してワーカーをインスタンス化し、次にレコードプロセッサを使用して Kinesis data stream から取得したデータを処理します。KCLアプリケーションは任意の数のインスタンスで実行できます。同じアプリケーションの複数のインスタンスが、障害発生時に連係し、動的な負荷分散を行います。スループットの制限を条件として、複数の KCLアプリケーションで同じストリームを処理することもできます。

KCL のロール

KCL は、レコード処理ロジックと Kinesis Data Streams の仲介として機能します。

KCL アプリケーションは起動時に KCL を呼び出してワーカーをインスタンス化します。この呼び出しは、アプリケーションの設定情報 (ストリーム名や AWS の認証情報など) を KCL に提供します。

KCL は、次のタスクを実行します。

  • ストリームに接続する

  • シャードを列挙する

  • シャードと他のワーカー (存在する場合) の関連付けを調整する

  • レコードプロセッサで管理する各シャードのレコードプロセッサをインスタンス化する

  • ストリームからデータレコードを取得する

  • 対応するレコードプロセッサにレコードを送信する

  • 処理されたレコードのチェックポイントを作成する

  • ワーカーのインスタンス数が変化したときに、シャードとワーカーの関連付けを調整する

  • シャードが分割またはマージされたときに、シャードとワーカーの関連付けを調整する

このページの内容: