同じ Amazon DynamoDB テーブルで別の Amazon Kinesis クライアントライブラリ (KCL) アプリケーションを使用しようとしているのですが、どうすればよいですか? DynamoDB 以外のものをチェックポインティングテーブルとして使用する場合はどうなりますか?
簡単な説明
KCL を使用するための要件は 2 つあります。
- 各 KCL アプリケーションは、独自の DynamoDB テーブルを使用する必要があります。
- KCL チェックポイントには DynamoDB テーブルを使用する必要があります。
解決方法
同じ DynamoDB テーブルを使用して異なる KCL アプリケーションを使用できますか?
ユーザーは、次の理由により、同じ DynamoDB テーブルで異なる KCL アプリケーションを使用できません。
-
スキャン操作は、DynamoDB テーブルからリースを取得するために使用します。したがって、テーブルに異なる KCL アプリケーションのリースが含まれている場合、各アプリケーションは、アプリケーション自体に関連しないリースを受け取る可能性があります。DynamoDB リースの例外の詳細については、アマゾン ウェブ サービス - ラボ GitHub ウェブサイトの DynamoDBLeaseRefresher.java を参照してください。
-
ストリームのシャード ID は、チェックポイント中に DynamoDB テーブルのプライマリキーとして使用されます。異なる KCL アプリケーションが同じ DynamoDB テーブルを使用し、同じシャード ID がストリームで使用されている場合、チェックポイントで不整合が発生する可能性があります。
代わりに、アプリケーション名を DynamoDB テーブルのデフォルト名として使用し、KCL でテーブル名を手動で設定できます。KCL バージョン 1.x でテーブル名を設定する方法の例を次に示します。
KinesisClientLibConfiguration kinesisClientLibConfiguration = // KCL 1.x<br> new KinesisClientLibConfiguration(...)<br> .withTableName(<table_name>);
注: この KinesisClientLibConfiguration コード例の詳細については、アマゾン ウェブ サービス - ラボ GitHub ウェブサイトの KinesisClientLibConfiguration.java を参照してください。
KCL バージョン 2.x でテーブル名を手動でセットアップすることもできます。
ConfigsBuilder configsBuilder = new ConfigsBuilder(...).tableName(<table_name>); // KCL 2.x
注: この ConfigsBuilder コード例の詳細については、アマゾン ウェブ サービス - ラボ GitHub ウェブサイトの ConfigsBuilder.java を参照してください。
チェックポイントテーブルとして DynamoDB 以外のものを使用できますか?
ユーザーは DynamoDB を KCL のチェックポイントテーブルとしてのみ使用できます。DynamoDB は KCL のチェックポイントテーブルとして必要です。これは、KCL の動作と実装が次の方法で DynamoDB と相互接続されているためです。
関連情報
DynamoDB の Kinesis データストリームによるシャードの設定と変更データキャプチャのモニタリング