gpt4 book ai didi

amazon-web-services - 具有 SQSEvent 和大批量大小的 Lambda 调用多个实例,每个实例处理几个项目

转载 作者:行者123 更新时间:2023-12-04 11:27:51 25 4
gpt4 key购买 nike

一点背景,
我正在使用 Serverless 和 .Net 创建一个带有 SQS 触发器的 lambda。
事件触发器设置为批处理大小为 10k,等待时间(批处理窗口即 MaximumBatchingWindowInSeconds)为 30 秒。
队列的可见性超时设置为近 16 分钟。
现在我已经将 lambda 设置为仅 1 的保留并发并运行了一个测试,我向队列发送了 100 个项目,并希望看到只有一个 lambda 调用正好包含这 100 个项目。
问题是它分离了队列中的项目并改为调用 lambda 5 次,导致创建了五个包作为 lambda 功能的一部分,而不是我想要的一个包。 (仅供引用,lambda 的输出会在消息的 s3 中创建包。我希望减少大包。)
现在问题 : 这是预期的行为吗?如果是这样,为什么会这样,当我将队列设置为最多累积 10k 个项目而不是 15 个时。
根据aws docs如果有效负载大于 256kb,则 lambda 可以获得比 batchSize 更少的消息,但我的消息非常小,100 条消息远不及 256kb。所以这不可能是原因。
也欢迎提供有关处理此问题的替代方案的建议,现在我正在考虑运行一个事件桥调度程序,该程序使用 SQS ReceiveMessage api 调用 lambda 并创建一个包,但我还必须确保之后正确删除队列.
我在这里有点无能为力,我很感激你们的任何想法。谢谢。

最佳答案

Problem was that it separated the items in the queue and invoked the lambda five times instead, causing five packages to be created as part of the lambda's functionality instead of the one package I wanted.


我想这大概是因为有 五个 SQS 池线程 lambda 用于池 SQS。来自 AWS blog :

Lambda service will begin polling the SQS queue using five parallel long-polling connections.


因此,即使您保留了 1 的并发性,lambda 仍然使用 5 个线程(您无法控制),而您的 SQS 消息已分发 进入这些线程。然后,每个线程一一调用您的 lambda 函数,结果观察到 5 次调用。

关于amazon-web-services - 具有 SQSEvent 和大批量大小的 Lambda 调用多个实例,每个实例处理几个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67076207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com