KCL消费者缺少记录

时间:2017-04-07 11:18:35

标签: amazon-web-services amazon-kinesis

我观察到kinesis流中存在一些记录,但KCL消费者应用程序尚未收到这些记录。可能出现这种情况的原因是什么?之前和之后的记录都很好。

我的应用程序中消耗了所有异常,但KCL未收到这些异常。所以http://docs.aws.amazon.com/streams/latest/dev/troubleshooting-consumers.html#w1ab1c11c11c15b9的情况也没有发生。

一些细节: 开放分片的数量:4 封闭碎片的数量:3 运行的工人数量:5

我从我的Kinesis生成器中获取序列号,并使用AT_SEQUENCE_NUMBER作为aws cli中的分片迭代器类型直接获取记录,我可以看到这些记录。

所以流有它们但是KCL应用程序没有收到它们。

1 个答案:

答案 0 :(得分:0)

  

查看kinesis响应中“millis_behind_latest”的值。   如果值是~86399000&您的流保留期限为24   小时(86400000),这就解释了为什么你变空了   响应。

当您使用shard_iterator检索记录时,记录不再位于流中,因为已超出记录的保留期。因此,您得到一个空的结果,因为最旧的记录已过期而不再存在于数据流中。所以shard_iterator现在指向磁盘中的空白区域。

当发生这样的事情时,取“next_shard_iterator”的值并使用get_records再次获取kinesis数据记录。也许数据不会存储在并发/连续的内存块中,因此我们会在检索数据之间得到空的结果。

继续使用“next_shard_iterator”的值并使用get_records,直到“millis_behind_latest”的值为0。

您肯定会将所有数据添加到kinesis流中。

希望这个答案有所帮助。 :)