2017-04-07 75 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流中的數據。

希望此回答有幫助。 :)