2017-04-07 76 views
0

我注意到有一些记录存在于kinesis流中,但它们尚未被KCL消费者应用程序接收。这可能发生的原因是什么?之前和之后的记录都很好。KCL消费者缺失记录

所有异常都在我的应用程序中使用,并且不会被KCL收到。所以http://docs.aws.amazon.com/streams/latest/dev/troubleshooting-consumers.html#w1ab1c11c11c15b9的情况也没有发生。

一些细节: 一些开放碎片:4 数封闭碎片:5

我从我的Kinesis生产者获取的序列号,并直接拿来使用AT_SEQUENCE_NUMBER作为记录:运行3 的工人数量碎片迭代器类型在aws cli中,我可以看到这些记录。

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

+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流中的数据。

希望此回答有帮助。 :)