AWS Lambda SQS触发器批大小与批处理窗口配置未按预期运行问题咨询
SQS标准队列Lambda触发器批大小未达配置问题排查方向
- SQS API原生调用限制
AWS SQS的ReceiveMessage接口单次最多返回10条消息,Lambda触发器的批大小是逻辑聚合值,需要轮询器在批窗口内多次调用ReceiveMessage攒够指定数量。如果你的队列消息分散在SQS后端分布式分片节点,每次调用只能拉取到少量分片上的消息,会大幅拉长攒批的耗时,提前触发批窗口。 - SQS队列配置不匹配
- 检查队列的
ReceiveMessageWaitTimeSeconds参数,若设置值低于20秒(长轮询最大值),每次ReceiveMessage调用如果没拉到足够消息会提前返回,导致轮询器无法高效攒批 - 检查队列的
VisibilityTimeout值,必须大于【Lambda批窗口时长 + 单Lambda函数最大执行时长】,否则攒批过程中已拉取的消息会因可见性超时重新回到队列,无法计入当前批次
- 检查队列的
- 事件源映射配置问题
- 如果你配置了触发器的过滤规则
FilterCriteria,只有符合过滤规则的消息才会被计入批次,若符合规则的消息占比低,即使队列中堆积大量消息,批次也只能攒到少量符合条件的消息 - 检查是否开启了部分批量失败响应功能,如果前序批次有处理失败的消息回到队列,会占用轮询拉取配额,拉取的重复失败消息不会被计入新批次的有效计数
- 如果你配置了触发器的过滤规则
- 消息生产速率不匹配
你观测到的SQS队列可接收150条是队列的瞬时存量还是持续生产速率?如果消息生产速率只有每秒不到0.1条,300秒的批窗口到期时自然只能攒到20-30条消息,不会继续等待。 - Lambda执行逻辑限制
你设置了Lambda并发数为1,轮询器必须等上一个Lambda调用执行完成后才会触发下一个批次。如果你的函数执行耗时较长,在函数运行期间轮询器拉取到的消息累积到20-30条时函数刚好执行完成,轮询器会直接触发当前批次,不会继续等待凑够10000条。
内容的提问来源于stack exchange,提问作者Jaydip Kalkani
相关产品推荐
相关产品推荐

