【问题标题】:KCL consumer missing recordsKCL 消费者丢失记录
【发布时间】:2017-09-02 18:16:15
【问题描述】:

我观察到 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 应用程序没有收到它们。

【问题讨论】:

  • 有同样的问题。你找到解决方法了吗?

标签: amazon-web-services amazon-kinesis


【解决方案1】:

查看运动响应中“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。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2020-01-08
    相关资源
    最近更新 更多