同じ Amazon DynamoDB テーブルで異なる Amazon Kinesis クライアントライブラリアプリケーションを使用できますか?

最終更新日: 2020 年 5 月 8 日

同じ 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 シャード ID の詳細については、「アプリケーション状態データ」を参照してください。

代わりに、アプリケーション名を DynamoDB テーブルのデフォルト名として使用し、KCL でテーブル名を手動で設定できます。KCL バージョン 1.x でテーブル名を設定する方法の例を次に示します。

KinesisClientLibConfiguration kinesisClientLibConfiguration = // KCL 1.x
        new KinesisClientLibConfiguration(...)
        .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 と相互接続されているためです。

  • KCL には ShardSyncTask.java が含まれています。これにより、ストリーム内のシャードリースが DynamoDB テーブルに含まれることが保証されます。このチェックは、KCL で定期的に実行されます。
  • KCL には、DynamoDBLeaseTaker.java および DynamoDBLeaseRenewer.java が含まれています。これらは、KCL でリースを管理および更新するコンポーネントです。DynamoDBLeaseTaker.java および DynamoDBLeaseRenewer.java は、DynamoDBLeaseRefresher.java と連携して、DynamoDB に頻繁に API リクエストを送信します。
  • KCL がチェックポイントを作成すると、DynamoDBCheckpointer.java および DynamoDBLeaseCoordinator.java からのリクエストが DynamoDB に対して行われます。これらのリクエストは、DynamoDBLeaseCoordinator.javaDynamoDBLeaseRenewer.java、または DynamoDBLeaseRefresher.java を介して行われます。

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合