我是AWS Kinesis的新手。尝试学习如何使用AWS DynamoDB构建分布式应用程序。有人可以告诉我如何使用AWS Cli访问AWS Kinesis中我的流使用的DynamoDB中的表吗?我可以查询表格吗?
答案 0 :(得分:1)
当然。 Kinesis-stream使用Amazon Dynamodb表进行消费者抵消管理。
您的表格与您的消费者名称(通过KCL定义)具有相同的名称。您可以通过控制台(https://console.aws.amazon.com/dynamodb/home)
使用者可能在多个实例中运行,但只有一个实例(THE leaseOwner
)可以从一个分区(或Krdis称之为Shard)中消耗。如果此消费者失败,则同一消费者的另一个实例将接管并继续从checkpoint
进行处理。
消费者实例正在处理的分片称为leaseKey
,它对于表是唯一的。
Dynamodb中基于键值的文档的数据结构如下所示,
其中
"S" - Char array
"N" - Number
{
"leaseOwner": {
"S": "SmartConsumerStream_Consumer-192.168.1.83"
},
"checkpoint": {
"S": "49570630332110756564477900867375857710984404992079691778"
},
"checkpointSubSequenceNumber": {
"N": "0"
},
"leaseCounter": {
"N": "16"
},
"leaseKey": {
"S": "shardId-000000000000"
},
"ownerSwitchesSinceCheckpoint": {
"N": "0"
}
}
您可以使用Dynamodb API获取给定partitionKey
或leaseKey
的当前偏移量。您只能按leaseKey
进行查询,因为这是表中的索引键。它由Kinesis-stream本身创建。
您可以使用stream-driver我在here写的,这样可以非常轻松地为您提供消费者偏移的界面。
以下是kinesis-stream tests,也可能会有所帮助。
- 将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;
}
希望它有所帮助,请告诉我是否可以通过其他方式提供帮助。