這是一個奇怪的不完整的例子。不顯示或討論如何初始化sequenceNumberOfPreviousRecordin
。我在aws論壇發現了一個slightly better example,顯然使用的起始序號是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()
);
}
你的例子對分區鍵的使用也很奇怪。除非分區密鑰的分佈非常不均勻,否則密鑰0和1很可能會在同一個分區中結束。在大多數情況下,您最好使用隨機uuid來確保在您的分片中分發傳入記錄。
那麼我的第二個問題呢?應該將循環中的記錄的setSequenceNumberForOrdering設置爲循環中上一條記錄的序列號還是具有相同分區鍵的最後一條記錄?鏈接的例子將分區鍵設置爲一個常量值。 – EagleBeak