2

我想按给定的时间跨度(或开始时间)重播 Kinesis 记录

用例:

在应用程序失败时,某些流记录可能会被视为已处理,但实际上并未最终确定。即未保存在本地数据存储中。等系统恢复时,我们想提前 30 分钟(或任何给定数量)开始处理当前检查点的记录。

我遇到了这个https://github.com/scopely/kinesis-vcr 它将 Kinesis 记录保存到 S3 中,然后从 S3 重播事件

我想知道是否可以在没有 s3 的情况下重播记录,因为 Kinesis 将记录保存 24 小时。24小时足够长。

4

2 回答 2

0

基于时间的迭代器使您的流可以很容易地被您的处理应用程序重放。使用基于时间的迭代器,您可以从流中与时间戳对应的位置读取记录。

这使您能够及时返回并在默认 24 小时或延长的 7 天数据保留期内的任何时间窗口重播流。Java Streams API 有一个叫做 GetShardIterator 的东西,你可以尝试在 C# 中找到类似的东西

于 2016-09-15T05:03:55.220 回答
0

你需要指定一个TIMESTAMP 的ShardIteratorType所以。

我认为这可能是错误的做法。最好保留成功处理的记录的序列号,并让您的应用程序使用它来处理下一个记录(开始使用 AT_SEQUENCE_NUMBER 的 ShardIteratorType)。如果您像这样以编程方式构建它,那么您就可以避免回溯 x 时间段的猜测工作。

于 2017-07-14T05:12:16.860 回答