我尝试将不同的 Amazon Kinesis 客户端库(KCL)应用程序与同一 Amazon DynamoDB 表一起使用。我该如何操作? 如果我想要将除 DynamoDB 以外的其他表用作检查点表,该怎么办?
简短描述
使用 KCL 有两个要求:
- 每个 KCL 应用程序必须使用自身的 DynamoDB 表。
- 必须将 DynamoDB 表用于 KCL 检查点。
解决方法
能否将不同的 KCL 应用程序与同一 DynamoDB 表一起使用?
用户无法将不同的 KCL 应用程序与同一 DynamoDB 表一起使用,原因如下:
-
扫描操作用于从 DynamoDB 表获取租约。因此,如果表包含不同 KCL 应用程序的租约,则每个应用程序都会收到与其本身无关的租约。有关 DynamoDB 租约例外的更多信息,请参阅 Amazon Web Services - 实验室 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 代码示例的更多信息,请参阅 Amazon Web Services - 实验室 GitHub 网站上的 KinesisClientLibConfiguration.java。
您还可以在 KCL 版本 2.x 上手动设置表名称:
ConfigsBuilder configsBuilder = new ConfigsBuilder(...).tableName(<table_name>); // KCL 2.x
**注意:**有关此 ConfigsBuilder 代码示例的更多信息,请参阅 Amazon Web Services - 实验室 GitHub 网站上的 ConfigsBuilder.java。
能否将除 DynamoDB 以外的其他表用作检查点表?
用户只能将 DynamoDB 用作 KCL 的检查点表。DynamoDB 需要用作 KCL 的检查点表,因为 KCL 的行为和实施通过以下方式与 DynamoDB 相互关联:
相关信息
在 DynamoDB 中使用 Kinesis Data Streams 配置分片和监控变更数据捕获