我在SQS队列中有20K消息。我也有一个lambda将处理SQS消息,并将数据放入ElasticSearch服务器。
我已将SQS配置为lambda的触发器,并将Lambda的SQS批处理大小限制为10。我还限制了lambda的一个实例只能在给定时间运行。
但是,有时我从AWS控制台看到超过1万in-flight messages
。最多可发送10条机上消息吗?
因此,lambda仅能正确处理9K的SQS消息。
以下是一个屏幕截图,显示了我已将lambda限制为在给定时间内只能运行1个实例。
答案 0 :(得分:4)
我一直在进行一些测试,并同时与AWS技术支持联系。
我目前认为的是:
Amazon Simple Queue Service支持5个并发函数调用的初始突发,并且每分钟增加60个并发调用的并发性。 Doc
1 /进行合并的事物是一个单独的实体。很有可能是一个lambda函数,它将使SQS长时间处于池中,然后调用我们的lambda函数。
2 / Pool-Lambda根本不考虑我们的Receiver-Lambda。不在乎该功能是否以最大容量运行,或者Receiver-Lambda有多少最大并发可用
3 /由于这种组合。这种行为不是我们从Lambda-SQS集成中所期望的。更糟糕的是,如果突然,队列中爆发了数百万条消息。 Receiver-Lambda并发永远无法赶上pooling-Lambda发送的消息量,从而导致工作丢失
测试:
结果:
我将在得到AWS支持的确认后立即更新此答案
支持答案。截至2019年第一季度TL; DR版本
1 /假设是正确的,有一个“投票者”
2 / Poller不考虑保留并发 作为其算法的一部分
3 /该轮询者的硬限制为1000