【发布时间】:2019-01-30 00:23:48
【问题描述】:
我在 SQS 队列中有 20K 条消息。我还有一个 lambda 将处理 SQS 消息,并将数据放入 ElasticSearch 服务器。
我已将 SQS 配置为 lambda 的触发器,并将 Lambda 的 SQS 批量大小限制为 10。我还限制了 lambda 的唯一一个实例可以在给定时间运行。
但是,有时我会从 AWS 控制台看到超过 10K in-flight messages。是否应该在 10 条飞行消息中达到最大值?
因此,lambda 只能正确处理 9K 的 SQS 消息。
下面是一个屏幕截图,显示我已将 lambda 限制为在给定时间仅运行 1 个实例。
【问题讨论】:
-
您显然没有限制同时 Lambda 的数量。默认情况下,您可以同时运行 1000 个。这与您看到的飞行中消息的数量大致匹配。我会验证你的限制是否正确。一般来说,单线程 Lambda 与它的设计目的相反。
-
@stdunbar 我添加了一张图片来显示当前的并发限制,它是 1。
-
文档说 Lambda 会删除“一旦您的 Lambda 函数成功完成”的消息。我想知道您的功能是否没有发出功能“成功完成”的信号(无论这意味着什么)?您的函数是否可能在完成之前超时?
-
@JohnRotenstein 来自 AWS Doc
...the handler can return a value...if you use the Event invocation type (asynchronous execution), the value is discarded.我检查了分析,lambda 实例没有超时。 -
@user1187968 你得到答案了吗?我面临同样的问题,同样的配置
标签: amazon-web-services aws-lambda amazon-sqs