キネシスストリームごとに複数のコンシューマーアプリを持つことができると読みました。
http://docs.aws.Amazon.com/kinesis/latest/dev/developing-consumers-with-kcl.html
ただし、消費者はシャードごとにしか使用できないと聞きました。これは本当ですか?これをサポートするドキュメントは見つかりません。また、複数のコンシューマーが同じストリームから読んでいる場合にどうなるか想像できません。もちろん、それはプロデューサーが異なるコンシューマーに対して異なるシャードでコンテンツを繰り返す必要があることを意味しません。
Kinesisクライアントライブラリはバックグラウンドでスレッドを開始し、それぞれがストリーム内の1つのシャードをリッスンします。仕様上、複数のスレッドを介してシャードに接続することはできません。
http://docs.aws.Amazon.com/kinesis/latest/dev/kinesis-record-processor-scaling.html
たとえば、アプリケーションが1つのEC2インスタンスで実行されており、4つのシャードを持つ1つのAmazon Kinesisストリームを処理している場合。この1つのインスタンスには、1つのKCLワーカーと4つのレコードプロセッサがあります(シャードごとに1つのレコードプロセッサ)。これらの4つのレコードプロセッサは、同じプロセス内で並行して実行されます。
上記の説明では、「KCLワーカー」という用語はKinesisコンシューマーアプリケーションを指します。スレッドではありません。
ただし、以下では、同じ「KCLワーカー」という用語は、アプリケーションの「ワーカー」スレッドを指します。これは実行可能です。
通常、KCLを使用するときは、インスタンスの数がシャードの数を超えないようにする必要があります(障害スタンバイの目的を除く)。各シャードは1つのKCLワーカーによって処理され、対応するレコードプロセッサが1つだけあるため、1つのシャードを処理するために複数のインスタンスが必要になることはありません。
KCLソースの Worker.Java クラスを参照してください。
パーティーには遅れますが、答えは、キネシスシャードごとに複数のコンシューマをできることができるということです。 KCLインスタンスはシャードごとに1つのプロセスのみを開始しますが、2番目のKCLインスタンスが同じストリーム(およびシャード)を消費するようにできます。
ただし、 the docs に示されているように、次のような制限があります。
各シャードは、1秒あたり最大5トランザクションの読み取り、最大合計データ読み取り速度は1秒あたり2 MBをサポートできます。
各メッセージが一度処理される複数のコンシューマーを含むストリームが必要な場合は、おそらく Amazon Simple Queue Service のようなものを使用する方がよいでしょう。