Eag*_*eak 5 java amazon-web-services amazon-kinesis aws-sdk
我对将文档放入Kinesis流中的AWS文档有些困惑:https : //docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html#API_PutRecord_RequestSyntax
它说sequenceNumberForOrdering应该使用设置来保证“从同一客户端到同一分区键的订单”的顺序。
此页面底部的示例让我感到困惑:
sequenceNumberOfPreviousRecord在该示例中,变量的初始值应该是什么
?"0"?也许我只是听不懂,但是我认为文档可以更好地解释这一点。
这是一个奇怪的不完整的例子。不显示或讨论如何sequenceNumberOfPreviousRecordin初始化。我在 aws 论坛中找到了一个稍微更好的示例,显然要使用的起始序列号是null。
String sequenceNumberOfPreviousRecord = null;
for (int j = 0; j < 200; j++) {
PutRecordRequest putRecordRequest = new PutRecordRequest();
putRecordRequest.setStreamName(myStreamName);
putRecordRequest.setData(ByteBuffer.wrap(String.format("%s-%d",testData, 200+j).getBytes()));
putRecordRequest.setPartitionKey( String.format( "partitionKey-%d", j/5 ));
putRecordRequest.setSequenceNumberForOrdering( sequenceNumberOfPreviousRecord );
PutRecordResult putRecordResult = kinesisClient.putRecord(putRecordRequest);
sequenceNumberOfPreviousRecord = putRecordResult.getSequenceNumber();
System.out.println("Successfully putrecord, partition key : " + putRecordRequest.getPartitionKey()
+ ", Data : " + String.format("%s-%d",testData, 200+j)
+ ", SequenceNumber : " + putRecordResult.getSequenceNumber()
);
}
Run Code Online (Sandbox Code Playgroud)
您的示例对分区键的使用也很奇怪。除非分区键的分布非常倾斜,否则键 0 和 1 很可能最终出现在同一个分片中。在大多数情况下,最好使用随机 uuid,以确保在分片中分配传入记录。
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |