我正在尝试通过Amazon Kinesis(每秒订购10,000点)抽取大量数据。
为了通过我的分片每秒最大化记录,我想通过分片循环我的请求(我的应用程序逻辑不关心单个消息的分片是什么)。
对于我发送给PutRecords端点的列表中的消息,我似乎可以使用ExplicitHashKey参数执行此操作 - 但是,Amazon文档实际上并没有描述如何使用ExplicitHashKey,除了以下的oracular语句: / p>
http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html
Records数组中的每条记录都可能包含一个可选参数, ExplicitHashKey,它覆盖分区键到分片映射。 此参数允许数据生成者明确确定 存储记录的分片。有关更多信息,请参阅添加 Amazon Kinesis Streams中包含PutRecords的多条记录 开发者指南。
(上面文档中的声明有一个链接到文档的另一部分,它根本不讨论ExplicitHashKeys)。
有没有办法使用ExplicitHashKey在分片中循环数据?
参数的有效值是什么?
答案 0 :(得分:7)
为每个分片分配一个从0到2 ^ 128 - 1的128位整数的连续范围。
您可以通过AWS CLI找到分配给流中给定分片的整数范围:
aws kinesis describe-stream --stream-name name-of-your-stream
输出如下:
{
"StreamDescription": {
"RetentionPeriodHours": 24,
"StreamStatus": "ACTIVE",
"StreamName": "name-of-your-stream",
"StreamARN": "arn:aws:kinesis:us-west-2:your-stream-info",
"Shards": [
{
"ShardId": "shardId-000000000113",
"HashKeyRange": {
"EndingHashKey": "14794885518301672324494548149207313541",
"StartingHashKey": "0"
},
"ParentShardId": "shardId-000000000061",
"SequenceNumberRange": {
"StartingSequenceNumber": "49574208032121771421311268772132530603758174814974510866"
}
},
{ ... more shards ... }
...
您可以将记录的ExplicitHashKey
设置为分片的哈希键范围内任何位置的整数值的字符串十进制表示,以强制将其发送到该特定分片。
请注意,由于您的分片上的先前合并和拆分操作,可能会有许多分片重叠HashKeyRanges
。当前打开的分片是没有SequenceNumberRange.EndingSequenceNumber
元素的分片。
您可以通过识别每个感兴趣的分片范围内的128位整数来循环一组分片中的循环请求,并循环将该数字的字符串表示分配给每个记录的ExplicitHashKey
。 / p>
作为旁注,您还可以计算给定PartitionKey
将评估的哈希值: