能否将不同的 Amazon Kinesis Client Library 应用程序与同一 Amazon DynamoDB 表一起使用?

上次更新时间:2020 年 5 月 8 日

我尝试将不同的 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 分片 ID 的更多信息,请参阅应用程序状态数据

相反,您可以将应用程序名称用作 DynamoDB 表的默认名称,然后在 KCL 上手动设置表名称。以下是有关如何在 KCL 版本 1.x 上设置表名称的示例:

KinesisClientLibConfiguration kinesisClientLibConfiguration = // KCL 1.x
        new KinesisClientLibConfiguration(...)
        .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 - 实验室 GitHubcode 网站上的 ConfigsBuilder.java

能否将除 DynamoDB 以外的其他表用作检查点表?

用户只能将 DynamoDB 用作 KCL 的检查点表。DynamoDB 需要用作 KCL 的检查点表,因为 KCL 的行为和实施通过以下方式与 DynamoDB 相互关联:

  • KCL 包含 ShardSyncTask.java,它可确保将流中的分片租约包含在 DynamoDB 表中。将在 KCL 中定期执行此项检查。
  • KCL 包含 DynamoDBLeaseTaker.javaDynamoDBLeaseRenewer.java,它们是用于在 KCL 中管理和更新租约的组件。DynamoDBLeaseTaker.javaDynamoDBLeaseRenewer.javaDynamoDBLeaseRefresher.java 一起使用,用于向 DynamoDB 发出频繁的 API 请求。
  • 当 KCL 设置检查点时,将向 DynamoDB 发出来自 DynamoDBCheckpointer.javaDynamoDBLeaseCoordinator.java 的请求。这些请求是通过 DynamoDBLeaseCoordinator.javaDynamoDBLeaseRenewer.javaDynamoDBLeaseRefresher.java 发出的。

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?