首页 > 解决方案 > 在 s3 中上传 400k 文件怎么会有 500 万条消息计数

问题描述

我已经配置了一个 AWS 管道,以便我的 S3 中的对象创建事件创建一条 SQS 消息。我正在使用标准 SQS 队列。上周,当我注意到 400k .3des 文件需要很长时间才能处理时,这个问题浮出水面。应用程序日志显示,我的代码逻辑必须在 3 天内处理近 500 万条消息,但 aws 命令显示仅上传了 400k 文件,AWS 控制台从未显示消息计数高于 500k。

我的研究表明,标准队列可能会创建重复的消息,但是消息计数应该以百万为单位显示,而它从来没有这样做过。我还无法为较小的数据集复制该问题,因为每个对象上传都会创建一条 SQS 消息。

我对可能的原因一无所知。

标签: amazon-web-servicesamazon-s3amazon-sqs

解决方案


我认为您不会将每条消息传递超过 10 次。既然您提到了应用程序日志,我将假设您在某处的服务器上运行了一个进程。

我的第一个想法是您的应用程序服务器开始出现性能问题,并且无法在超时之前处理每条 SQS 消息。这将导致 SQS 将消息放回队列中。

问题是您如何确认这一点?如果您进入 SQS 仪表板并选择您的 SQS,然后单击“监控”选项卡。确保更新您的时间范围,因为它默认为一小时。由于这是一个多星期前,您可能希望使用 CloudWatch->Metrics,因为您可以创建一个绝对时间范围来将数据限制在问题发生的时间。

首先让我们确认 SQS 指标与您的应用程序指标相匹配的时间窗口: NumberOfMessagesSent:这应该等于 400k。NumberOfMessagesReceived:这应该等于 500 万。NumberOfMessagesDeleted:这应该等于大约 500k。ApproximateAgeOfOldestMessage:随着消息等待处理,此数字应在 3 天内增加。

如果您没有获得这些数字,请发布您的指标,因为它将提供更好的洞察力。

还有几个问题需要你考虑。- 你有多少人接收器?- 如果您在处理完消息后才删除消息,则 ApproximateNumberOfMessagesNotVisable 指标应该接近接收者的数量。如果是 > 那么您的应用程序不会删除消息。如果它是 < 那么它可以表明您的应用程序在超时之前没有处理消息。

很难确切地告诉你发生了什么,但希望这会有所帮助。


推荐阅读