amazon-web-services - AWS 运动不返回记录

标签 amazon-web-services amazon-kinesis

我要获取以下代码

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

它也返回空数组。

有人可以帮帮我吗? 谢谢

最佳答案

GetRecords 并不总是返回记录,即使分片中有记录也是如此。 这在常见问题解答中有描述。

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

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

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

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

关于amazon-web-services - AWS 运动不返回记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38567528/

相关文章:

amazon-web-services - Amazon Kinesis Firehose 缓冲到 S3

apache-spark - 带有 Spark 1.6.1 Hadoop 2.7.2 的 Google Dataproc 中带有空记录的 Kinesis Stream

javascript - SubscribeToShard 命令异常

javascript - 使用浏览器 JavaScript SDK 检查 AWS S3 上是否存在文件?

amazon-web-services - Boto3 - 创建 S3 'object created' 通知以触发 lambda 函数

java - 如何保持 Java 程序 24/7 全天候运行?

gstreamer - 如何通过GST Launch认证?

amazon-web-services - AWS Glue - 条件触发器是否可以针对另一个工作流程中的作业进行条件触发?

amazon-web-services - terraform .12 - 添加多个内联策略

amazon-web-services - 如何在 aws kinesis 数据分析的 cloudformation 中将目标设置为 lambda