如何从 Amazon Kinesis 流中获取最新记录?

How can I get the most recent record from an Amazon Kinesis stream?

我想从 Amazon Kinesis 流中获取最新记录。我打算从此记录中提取时间戳,并将其与消费者应用检查点的最后一条记录的时间戳进行比较,以检查消费者是否落后。

我不能使用 LATEST 类型的分片迭代器。这是因为LATEST指的是紧跟在最近的记录之后,所以不能用来访问最近的记录。

有没有简单的方法获取最新的记录?

我正在考虑的一种方法是获取消费者最近处理的记录的序列号的分片迭代器,使用该分片迭代器发出 GetRecords 请求,从请求的结果中获取下一个分片迭代器,并重复直到 GetRecords 请求没有 return 任何记录。

这种方法将涉及读取自消费者检查点以来的所有记录,这似乎是不必要的浪费。有什么办法可以请求所有这些记录吗?

您可以使用指标:GetRecords.IteratorAgeMilliseconds 来自 Kinesis 的 CloudWatch 指标。看这里:http://docs.aws.amazon.com/kinesis/latest/dev/monitoring_with_cloudwatch.html

请注意,这是跨多个分片的多个迭代器的平均值。如果您需要在每个分片中更细粒度地查看此指标,您可以将其计算为处理器的一部分。

请记住,在具有多个分片的流中没有最新记录,因为每个分片的顺序都是独立的。如果您有多个分片,则需要检查每个分片的状态。在一个独立的 worker 中处理每个分片也是一种最佳实践,这通常会导致每个 worker 的延迟不同。

另一个重要注意事项是您可以为运动流设置多个进程。可以将事件放入 Redshift,也可以处理事件以在操作仪表板中创建实时计数器。这意味着您可以对每种类型的处理器有不同的延迟,而不仅仅是每个分片。