4

如何判断阅读器已处理 Kinesis 流中数据的百分比?我知道每个阅读器都有一个每个碎片检查点的序列号,我也可以从 describe-stream 中获取每个碎片的 StartingSequenceNumber,但是,我不知道阅读器当前在我的数据中有多远(我不知道知道分片的最新序列号)。

我正在考虑为每个分片获取一个 LATEST 迭代器并获取最后一条记录的序列号,但是如果自从我得到 LATEST 迭代器以来没有新数据,这似乎不起作用。

有什么想法或工具可以做到这一点吗?

谢谢!

4

2 回答 2

1

我建议您在应用程序中实现一个或多个自定义指标来跟踪这一点。

例如,您可以在 Kinesis 消息中附加消息发送时间,并在处理消息时将时间差记录为 AWS CloudWatch 自定义指标。这将表明您的消费者与流的前端有多近。

您还可以记录推送的消息数量(在推送应用程序处)和在 Kinesis 消费者处接收到的消息数量。如果您在 CloudWatch 上的图表中比较这些曲线,您可以看到曲线大致相互跟随,这表明消费者在跟上工作负载方面做得很好。

您还可以尝试监控您的 Kinesis 消费者,以查看它空闲等待记录的频率(即,Kinesis 没有返回任何结果,表明它位于流的前端并且所有记录都已处理)

另请注意,无法跟踪流中处理的“百分比”,因为 Kinesis 消息在 24 小时后过期(因此消息总数不断滚动)。也没有直接 (API) 函数来计算流中的消息数量(除非您已按上述方式记录)。

于 2015-02-22T05:44:24.217 回答
1

如果您使用 KCL,您可以通过将 Kinesis 的 cloudwatch 内置指标中的 IncomingRecords 与 KCL 发布的自定义指标 RecordsProcessed 进行比较来做到这一点。

然后你选择一个时间范围和间隔,比如 1 天。

然后,您将获得以下类型的图表:

在此处输入图像描述

如您所见,添加的记录多于处理的记录。通过查看每个点的值,您将确切地知道您的处理器是否落后。

于 2015-06-17T08:16:31.347 回答