【问题标题】:How can I get the most recent record from an Amazon Kinesis stream?如何从 Amazon Kinesis 流中获取最新记录?
【发布时间】:2015-03-30 12:44:09
【问题描述】:

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

我不能使用最新的分片迭代器类型。这是因为 LATEST 指向最近的记录之后,所以它不能用于访问最近的记录。

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

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

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

【问题讨论】:

    标签: amazon-web-services stream amazon-kinesis


    【解决方案1】:

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

    请注意,这是跨多个分片的多个迭代器的平均值。如果您需要在每个分片上对该指标有更细粒度的视图,您可以将其作为处理器的一部分进行计算。

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

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

    【讨论】:

    • 谢谢你的解释家伙!看起来这些指标都是针对整个流的。我想获得特定分片中的最新记录,而不必检查该分片中的所有记录 - 你知道这是否可能吗?
    • 目前没有。您可能可以为每个事件添加自己的时间戳,并在阅读时计算差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2018-10-17
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    相关资源
    最近更新 更多