AWS Kinesis无法返回记录

4

我有以下代码片段用于获取数据:

def getSample(accessKey: String, secretKey: String, streamName: String, size: Int, endpoint: String, region: String): Unit = {
        var client=getKinesisClient(accessKey, secretKey, endpoint, region)
        val decoder = Charset.forName("UTF-8").newDecoder()
        var shards = getShards(accessKey, secretKey, streamName, endpoint, region)
        val numberOfShards = shards.iterator()
        var isStop = false
        var sampleRecords = new StringBuilder
        while (numberOfShards.hasNext() && !isStop) {
            val shard = numberOfShards.next()
            var shardIterator: String = null
            val getShardIteratorRequest = new GetShardIteratorRequest()
            getShardIteratorRequest.setStreamName(streamName)
            getShardIteratorRequest.setShardId(shard.getShardId())
            getShardIteratorRequest.setShardIteratorType("TRIM_HORIZON")
            val getShardIteratorResult = client.getShardIterator(getShardIteratorRequest)
            shardIterator = getShardIteratorResult.getShardIterator
            var getRecordsRequest = new GetRecordsRequest
            getRecordsRequest.setShardIterator(shardIterator)
            var records: List[Record] = client.getRecords(getRecordsRequest).getRecords()
            println(records.size())
            var itr = records.iterator()
            var SampleData = new ArrayList[String]()
            while (itr.hasNext()) {
                val record = itr.next()
                val data = decoder.decode(record.getData).toString
                println(data)
            }
        }
    }

这将打印出记录计数为0。我用AWS CLI也做了同样的操作。

aws kinesis put-records --records "Data=hello world - hemant,PartitionKey=20150421" --stream-name simpleStream

返回0个失败记录 然后我运行了以下命令

aws kinesis get-shard-iterator --stream-name simpleStream --shard-id 0 --shard-iterator-type TRIM_HORIZON

并且。
aws kinesis get-records --shard-iterator xxxxxxxxx

它还会返回一个空数组。 有人可以帮我吗? 谢谢。
1个回答

6

GetRecords 方法并不总是返回记录,即使 shard 中有记录。

这在 FAQ 中有所描述。

https://aws.amazon.com/kinesis/streams/faqs/

问:为什么在我的 Amazon Kinesis 流中有数据,但是 GetRecords 调用返回空结果?

您正在从 TRIM_HORIZON 位置请求记录,这是 shard 中最旧的位置。 如果您连续多次(10 次、20 次或更多)调用 get-records 并继续迭代器指针,您将遇到记录。

以下论坛也很有用: https://forums.aws.amazon.com/thread.jspa?messageID=509980


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接