如何判断阅读器已处理 Kinesis 流中数据的百分比?我知道每个阅读器都有一个每个碎片检查点的序列号,我也可以从 describe-stream 中获取每个碎片的 StartingSequenceNumber,但是,我不知道阅读器当前在我的数据中有多远(我不知道知道分片的最新序列号)。
我正在考虑为每个分片获取一个 LATEST 迭代器并获取最后一条记录的序列号,但是如果自从我得到 LATEST 迭代器以来没有新数据,这似乎不起作用。
有什么想法或工具可以做到这一点吗?
谢谢!
如何判断阅读器已处理 Kinesis 流中数据的百分比?我知道每个阅读器都有一个每个碎片检查点的序列号,我也可以从 describe-stream 中获取每个碎片的 StartingSequenceNumber,但是,我不知道阅读器当前在我的数据中有多远(我不知道知道分片的最新序列号)。
我正在考虑为每个分片获取一个 LATEST 迭代器并获取最后一条记录的序列号,但是如果自从我得到 LATEST 迭代器以来没有新数据,这似乎不起作用。
有什么想法或工具可以做到这一点吗?
谢谢!
我建议您在应用程序中实现一个或多个自定义指标来跟踪这一点。
例如,您可以在 Kinesis 消息中附加消息发送时间,并在处理消息时将时间差记录为 AWS CloudWatch 自定义指标。这将表明您的消费者与流的前端有多近。
您还可以记录推送的消息数量(在推送应用程序处)和在 Kinesis 消费者处接收到的消息数量。如果您在 CloudWatch 上的图表中比较这些曲线,您可以看到曲线大致相互跟随,这表明消费者在跟上工作负载方面做得很好。
您还可以尝试监控您的 Kinesis 消费者,以查看它空闲等待记录的频率(即,Kinesis 没有返回任何结果,表明它位于流的前端并且所有记录都已处理)
另请注意,无法跟踪流中处理的“百分比”,因为 Kinesis 消息在 24 小时后过期(因此消息总数不断滚动)。也没有直接 (API) 函数来计算流中的消息数量(除非您已按上述方式记录)。
如果您使用 KCL,您可以通过将 Kinesis 的 cloudwatch 内置指标中的 IncomingRecords 与 KCL 发布的自定义指标 RecordsProcessed 进行比较来做到这一点。
然后你选择一个时间范围和间隔,比如 1 天。
然后,您将获得以下类型的图表:
如您所见,添加的记录多于处理的记录。通过查看每个点的值,您将确切地知道您的处理器是否落后。