Amazon web services 使用AWS Cli访问DynamoDB中的AWS Kinesis表

Amazon web services 使用AWS Cli访问DynamoDB中的AWS Kinesis表,amazon-web-services,amazon-dynamodb,amazon-kinesis,Amazon Web Services,Amazon Dynamodb,Amazon Kinesis,我是个新手。尝试学习如何使用AWS DynamoDB构建分布式应用程序。有人能告诉我如何使用AWS Cli访问AWS Kinesis中我的流所使用的DynamoDB中的表吗?我可以查询表格吗 当然。Kinesis stream使用Amazon Dynamodb表进行消费者补偿管理 您的表将具有与您的消费者名称相同的名称(通过KCL定义)。您可以通过控制台()查看所有消费者补偿表 使用者可以在多个实例中运行,但只有一个实例(leaseOwner)可以从一个分区(或Kinesis所称的碎片)中使用

我是个新手。尝试学习如何使用AWS DynamoDB构建分布式应用程序。有人能告诉我如何使用AWS Cli访问AWS Kinesis中我的流所使用的DynamoDB中的表吗?我可以查询表格吗

当然。Kinesis stream使用Amazon Dynamodb表进行消费者补偿管理

  • 您的表将具有与您的消费者名称相同的名称(通过KCL定义)。您可以通过控制台()查看所有消费者补偿表

  • 使用者可以在多个实例中运行,但只有一个实例(leaseOwner)可以从一个分区(或Kinesis所称的碎片)中使用。如果此使用者失败,则同一使用者的另一个实例将接管并从检查点继续处理

  • 检查点是最后处理的事件
  • 使用者实例正在处理的碎片称为
    leaseKey
    ,这对于表来说是唯一的

  • Dynamodb中基于键值的文档的数据结构如下:

在哪里

“S”-字符数组

“N”-编号

{
  "leaseOwner": {
    "S": "SmartConsumerStream_Consumer-192.168.1.83"
  },
  "checkpoint": {
    "S": "49570630332110756564477900867375857710984404992079691778"
  },
  "checkpointSubSequenceNumber": {
    "N": "0"
  },
  "leaseCounter": {
    "N": "16"
  },
  "leaseKey": {
    "S": "shardId-000000000000"
  },
  "ownerSwitchesSinceCheckpoint": {
    "N": "0"
  }
}
  • 您可以使用dynamodbapi获取给定
    partitionKey
    leaseKey
    的当前偏移量。您只能通过
    leaseKey
    进行查询,因为这是表中的索引键。它是由运动流本身创造的

  • 您可以使用我正在写的,接口,非常轻松地获得消费者补偿。

  • 以下是一些可能也有帮助的建议

总之,使用JavaAPI获取使用者偏移量 --将aws凭证放入
~/.aws/credentials

public Map<String, String> getConsumerPosition() {
    DynamoDB dynamoDB = new DynamoDB(getOffsetConnection()); //
    Table consumerOffsetTable = dynamoDB.getTable("your_consumer_id");

    Map<String, Object> leaseOwner = consumerOffsetTable.getItem("leaseKey", "shardId-000000000000").asMap();

    return new HashMap<String, String>(){{
        put(leaseOwner.get("leaseKey").toString(), leaseOwner.get("checkpoint").toString());
    }};
}

public AmazonDynamoDB getOffsetConnection() {
    AmazonDynamoDBClient dynamoDB = new AmazonDynamoDBClient(getAuthProfileCredentials(), getHttpConfiguration());

    return dynamoDB;
}

private ProfileCredentialsProvider getAuthProfileCredentials() {
    return new ProfileCredentialsProvider("your-aws-auth-profile_in_~/.aws/credentials");
}


private ClientConfiguration getHttpConfiguration() {

    ClientConfiguration clientConfiguration = new ClientConfiguration();

    return clientConfiguration;
}
公共映射getConsumerPosition(){ DynamoDB DynamoDB=新的DynamoDB(getOffsetConnection())// 表consumerofsettable=dynamoDB.getTable(“您的消费者id”); Map leaseOwner=consumerofsettable.getItem(“leaseKey”,“shardId-000000000000”).asMap(); 返回新的HashMap(){{ put(leaseOwner.get(“leaseKey”).toString(),leaseOwner.get(“checkpoint”).toString(); }}; } 公共AmazonDynamoDB getOffsetConnection(){ AmazonDynamoDBClient dynamoDB=新的AmazonDynamoDBClient(getAuthProfileCredentials(),getHttpConfiguration()); 返回发电机B; } 私有ProfileCredentialsProvider getAuthProfileCredentials(){ 返回新的ProfileCredentialsProvider(“your-aws-auth-profile_in.~/.aws/credentials”); } 私有客户端配置getHttpConfiguration(){ ClientConfiguration ClientConfiguration=新的ClientConfiguration(); 返回客户端配置; }
希望有帮助,如果我能在其他方面提供帮助,请告诉我。

您能澄清您的要求吗?它们是什么表以及如何填充?您是说您有一个DynamoDB表,配置为在添加/更改/删除数据时生成DynamoDB流?请解释您的系统,它是如何配置的,以及您试图实现的目标。我使用AWS Kinesis作为一个持久队列,带有一个发布子架构,我的所有服务都使用它进行通信。根据AWS中的文档,Kinesis使用DynamoDB存储应用程序状态。我想知道如何使用AWS Cli查看这些内容?这将帮助我理解检查点和grace shutdown是如何工作的,并实现它。谢谢。请您澄清“Kinesis根据文档使用DynamoDB存储应用程序状态”是什么意思?您能提供参考文档的链接吗?Amazon Kinesis不会将数据存储在DynamoDB中,除非您专门对此进行编码。请确保这里有必要的文档,[链接(]),希望这会有所帮助。该文档页面中引用的DynamoDB表用于管理正在使用的应用程序的状态。您正在编写使用KCL的代码吗?或者你在寻找关于如何使用动觉的一般建议?太棒了,这正是我需要的。你能不能也看看这个,酷,我把答案贴在那里了。如果有帮助,请告诉我。