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