好的,我将从一个详细的用例开始,并解释我的问题:
- 我使用第 3 方 Web 分析平台,该平台利用AWS Kinesis流将数据从客户端传递到最终目的地 - Kinesis 流;
- 网络分析平台使用 2 个流:
- 一个数据收集器流(单个分片流);
- 第二个流,用于丰富来自收集器流(单个分片流)的原始数据;最重要的是,这个流使用
TRIM_HORIZON
迭代器类型消耗来自第一个流的原始数据;
- 我使用AWS Java SDK使用流中的数据,具体使用
GetShardIteratorRequest
该类; - 我目前正在开发提取类,所以这是同步完成的,这意味着我只在编译类时才使用数据;
- 该类令人惊讶地工作,尽管有些事情我无法理解,特别是关于如何从流中消耗数据以及每种迭代器类型的含义;
我的问题是我检索到的数据不一致,并且其中没有时间逻辑。
当我使用
AT_SEQUENCE_NUMBER
并提供分片中的第一个序列号时.getSequenceNumberRange().getStartingSequenceNumber();
...作为``,我没有得到所有记录。同样,
AFTER_SEQUENCE_NUMBER
;- 当我使用
LATEST
时,我得到零结果; - 当我使用
TRIM_HORIZON
应该有意义的使用时,它似乎无法正常工作。它曾经为我提供数据,然后我添加了新的“事件”(记录到最终流中)并且我收到了零记录。神秘。
我的问题是:
- 如何安全地使用流中的数据,而不必担心丢失记录?
- 有没有替代品
ShardIteratorRequest
? - 如果有,我如何才能“浏览”流并查看其中的内容以进行调试参考?
TRIM_HORIZON
该方法缺少什么?
在此先感谢,我真的很想从 Kinesis 流中了解更多有关数据消耗的信息。