aws kinesis get-records返回空数组

时间:2015-04-22 16:53:59

标签: amazon-web-services

我正在玩Kinesis,我尝试了一个非常简单的例子

我首先提供了样本记录

aws kinesis put-records --records "Data=Test data - hemant,PartitionKey=20150421" --stream-name mystream 

我回来了

{
"FailedRecordCount": 0,
"Records": [
    {
        "SequenceNumber": "49549975503580743304507290523786194552567002802960728066",
        "ShardId": "shardId-000000000000"
    }
]}

所以看来似乎有效。现在我试图回溯这条记录,首先,获取shard-iterator,然后使用返回的shard-iterator调用gert-record。 get-shard-iterator返回

aws kinesis get-shard-iterator --stream-name cakestream --shard-id 0 --shard-iterator-type LATEST
{
"ShardIterator": "AAAAAAAAAAEna1yL0ccbircK95wu6WRfN7LamlaXL5bZ1GzaFrUcSU8S74o4Pus59Z0XmdaMamdvz4tv3qKuPxpomz/Eeg671gVUKNHUDruAKyA4pjWRP37VI1K5w/kLqpBo49YsCKHMxcduaN6GdeCXL4QMSgvH9Aqi7leRuIr2T1w4MeqjhlcM1iz8icaWGlHfUVCbgtY="}

现在我尝试使用该shard-iterator获取记录

aws kinesis get-records --shard-iterator "AAAAAAAAAAEna1yL0ccbircK95wu6WRfN7LamlaXL5bZ1GzaFrUcSU8S74o4Pus59Z0XmdaMamdvz4tv3qKuPxpomz/Eeg671gVUKNHUDruAKyA4pjWRP37VI1K5w/kLqpBo49YsCKHMxcduaN6GdeCXL4QMSgvH9Aqi7leRuIr2T1w4MeqjhlcM1iz8icaWGlHfUVCbgtY="{
"NextShardIterator": "AAAAAAAAAAE4lTq/jqanuj+xsULhl6QQeykzToObYDoaukearHkQfed/keYjgxzwfxkDXlBJBAOVLsk3pI9d0EwQWn5NmJ9poCL9M1wGDe2M42fgmp1EdK0WJGI1zG7TMi8m1bGQ6qDL05zf7gCtK5/xod6Vw/Gr98bsdQ8Ewp3U57FuHxZ29LUUbYp3AoN7CbUTD5rtqzU=",
"Records": []}

所以,我的问题是为什么我没有收回我的数据?

4 个答案:

答案 0 :(得分:3)

最新的分片迭代器将返回在创建后中放入流中的所有记录。

因此,如果您想查看记录,则必须在创建迭代器后添加它们,然后请求获取记录。

答案 1 :(得分:1)

正如Paedolos所提到的,LATEST shard迭代器将仅返回创建迭代器后放置的记录。

如果您想从头开始处理流中的所有记录,则需要创建TRIM_HORIZON分片迭代器。

答案 2 :(得分:1)

似乎有流名称不匹配。

您已将记录放在 mystream 信息流中,但您正尝试从 cakestream 信息流中提取这些信息。

答案 3 :(得分:0)

这里没什么...

  • 不能保证您最终会在第一次尝试中获得记录。您将不得不遍历迭代器(每次调用getRecords()都会返回下一个迭代器),以最终获取所有数据。
  • 有多种获取第一个迭代器的方法。您可能要根据用例使用正确的

    有效值: AT_SEQUENCE_NUMBER | AFTER_SEQUENCE_NUMBER | TRIM_HORIZON |最新| AT_TIMESTAMP