我想从亚马逊Kinesis流中获取最新记录。我打算从此记录中提取时间戳,并将其与消费者应用程序检查点的最后一条记录的时间戳进行比较,以检查消费者是否落后。
我不能使用shard迭代器类型LATEST。这是因为LATEST指向最近的记录之后,所以它不能用于访问最新的记录。
有没有简单的方法来获取最新记录?
我正在考虑的方法是获取消费者最近处理的记录的序列号的分片迭代器,使用该分片迭代器发出GetRecords请求,从请求的结果中获取下一个分片迭代器,以及重复,直到GetRecords请求没有返回任何记录。
这种方法将涉及阅读消费者检查点以来的所有记录,这似乎是不必要的浪费。有没有办法要求所有这些记录?
答案 0 :(得分:1)
您可以使用来自Kinesis的CloudWatch指标的指标:GetRecords.IteratorAgeMilliseconds。见这里:http://docs.aws.amazon.com/kinesis/latest/dev/monitoring_with_cloudwatch.html
请注意,这是跨多个分片的多个迭代器的平均值。如果您需要在每个分片上有一个更精细的度量标准视图,您可以将其计算为处理器的一部分。
请记住,在具有多个分片的流中没有最新记录,因为每个分片在其顺序中是独立的。如果您有多个分片,则需要检查每个分片的状态。在独立工作者中处理每个分片也是一种最佳实践,这通常会导致每个工作人员产生不同的延迟。
另一个重要的注意事项是,您可以为kinesis流创建多个进程。可以将事件放入Redshift,并且可以处理事件以在操作仪表板中创建实时计数器。这意味着每种类型的处理器都可以有不同的延迟,而不仅仅是每个分片。