并非所有 SQS 消息最终都会出现在 Lambda 中:大多数消息都会消失

Ric*_*ick 4 amazon-sqs amazon-web-services aws-lambda

我有一个 AWS SQS 队列(标准,非 FIFO),它有一个 Lambda 函数作为使用者。

每当我向队列发送一堆消息(通常一次大约 10 条)时,lambda 只会拾取大约 2 条消息(在 CloudWatch Logs 中进行验证)。其他人从队列中消失。

Lambda 批量大小设置为 1,因此我希望所有 10 条消息都位于队列中并被 Lambda 一条一条地拾取,但这并没有发生。我正在使用 CloudWatch 检查 Lambda 正在做什么,并且没有丢失消息的痕迹。

我通过记录数组的大小event.Records(始终为 1)在 Lambda 中验证它每次只收到一条消息。

该队列还有一个死信队列。最初,最大接收数设置为 1。当我将其增加到 3 时,在队列可见性超时后会拾取更多消息,但仍然只有少数。

我的队列设置

  • 可见性超时:2 分钟
  • 传送延迟:0秒
  • 接收消息等待时间:5秒
  • 消息保留期限:4天
  • 最大消息大小:256kb

我想知道为什么消息没有被处理,而是消失了?

Ric*_*ick 6

事实证明,这与 Lambda 函数的预留并发有关。我的并发数设置为 1,这导致了问题。

我期望 SQS 消息将保留在队列中,直到有 Lambda 函数可以拾取它们。

实际上, 由于函数受到限制而未被 Lambda 拾取的消息以及在可见性超时之后将被视为失败消息。

关于这个问题有一篇很棒的博客文章:https://data.solita.fi/lessons-learned-from-combining-sqs-and-lambda-in-a-data-project/