【发布时间】:2021-05-29 12:31:30
【问题描述】:
我有 2 个 Lambda 函数和一个 SQS 队列。 第一个 Lambda 将消息发送到队列。 然后第二个 Lambda 对此队列有一个触发器,批处理大小为 250,批处理窗口为 65 秒。
我预计大约每 65 秒后会以 250 条消息的形式触发第二个 Lambda。在第二个 Lambda 中,我调用了限制为每分钟 250 个 API 调用的第 3 方 API(我每分钟获得 250 个令牌)。
我测试了这个设置,将 32.000 条消息添加到队列中,而第二个 Lambda 没有按预期批量接收消息。起初它执行了 15k 条消息,然后没有足够的令牌,所以它没有处理这些消息。
第 3 方 API 基于令牌桶,每分钟填充率为 250,最大容量为 15.000。由于存储桶的容量,它设法处理了前 15.000 条消息,然后没有足够的容量来处理其余的。
我不明白出了什么问题。
【问题讨论】:
-
我是否理解正确,在您将 32k 条消息添加到 SQS 队列后,您的 Lambda 函数使用 15k 条消息(一批?)而不是 250 条执行? 存储桶的总容量是多少?是每小时还是您可以使用的总代币数量?
-
澄清一下:15k 条消息并没有在一次 Lambda 调用中处理,对吧?它应该是 60 左右,根据文档,标准 SQS 的最大批量大小为 10k。
-
您检查过您的
Concurrent executions和Invocations的 lambda 指标了吗? -
@Marcin 调用是
41,并发执行是143。 -
是的,所以我认为这证实了@Maurice 的回答。您的函数并行运行,而不是顺序运行。
标签: amazon-web-services aws-lambda amazon-sqs