如何扇出 SQS

Shi*_*ppa 6 amazon-sqs amazon-web-services

我有多个来源将原始数据推送到 S3。我已经在我的 S3 存储桶上配置了 SQS 事件通知。问题是滞后和限制。

我预计在不久的将来会有更多的来源,因为我们在一次轮询中只能从 SQS 获得 10 条消息,我认为在不久的将来会有更多的来源将数据推送到 S3,那么 SQS 将充满了数千条消息,我将无法更快地处理它们。

我正在考虑通过将消息从我的主 SQS 队列传播到更多 SQS 队列来扇出 SQS,以便我的处理层可以轮询多个队列,例如:5 个队列并处理更多消息。可能的方法应该是什么?

Kre*_*ase 11

“...因为我们只能从 SQS 的一次轮询中获得 10 条消息...我正在考虑扇出 sqs,例如将消息从我的主 SQS 队列传播到更多 SQS 队列,以便我的处理层可以轮询多个队列,例如:5 个队列并处理更多消息。”

简短回答:不要这样做。

原因如下:

是的,一次轮询最多可以检索 10 条消息。但是,您可以让多个线程和多个主机都轮询单个队列。让您的消费者并行运行是这里的关键,因为处理队列条目将是您的瓶颈——而不是从队列中检索条目。单个 SQS 队列可以处理大量轮询线程。

您提议的多队列扇出有许多缺点:

  1. 编码和操作更复杂
  2. 较慢 - 项目必须经历从主队列(或 SNS,如果您使用它)到消费队列的传输开销
  3. 更昂贵 - 每条消息 SQS 收费。每条消息的 SNS 费用。
  4. 您将不得不自己处理重复——对于单个队列,SQS 内置的可见性超时将主要阻止其他消费者处理相同的项目。对于多个队列,您必须提出自己的重复数据删除策略
  5. 只需使用一个队列。以后你会感谢我的。


E.J*_*nan 8

将消息扇出到多个 sqs 队列的典型方法是使用 SNS。

s3 事件通知将转到 SNS 而不是 SQS,SNS 将负责将这些消息散布到任意数量的队列中。

也就是说,我不确定我是否理解为什么您认为如果使用多个消息队列将能够更快地处理消息。

由多个处理客户端或使用多线程的单个客户端轮询的单个队列 SQS 队列可能都是提高处理速度的更好方法,而不是简单地引入更多队列。