当前位置: 首页 > 知识库问答 >
问题:

标准SQS与FIFO SQS中的吞吐量,每个消息都有一个唯一的groupId

督阿苏
2023-03-14

我不太关心事件的顺序,但我希望消息只处理一次。侦听SQS消息的lambda将其存储在DynamoDB中,因此吞吐量非常重要,因为我有多个微服务(作为生产者)向该SQS写入消息,这些消息将由单个微服务读取。

关于只处理一次消息,这是FIFO队列支持的,但据说吞吐量不好。

如果每条消息都有唯一的groupId,FIFO队列的吞吐量是否与标准队列相同?

如果没有,我的下一个选择可能是在存储消息时在DynamoDB中使用“attribute\u not\u exists”。

以下哪项应该更好?

共有3个答案

唐宏壮
2023-03-14

SQS交付保证至少一次。您的应用程序必须设计为处理重复消息。

我强烈建议以这种方式构建您的应用程序。

如果必须只处理一次某些类型的数据,则需要一个高度一致的系统。考虑使用dynamodb和条件更新

田修为
2023-03-14
  • 30000条消息(具有批处理高吞吐量模式)
  • 3000条消息(无批处理高吞吐量模式)
  • 3000条消息(带批处理)
  • 300条消息(无批处理)
  • 几乎无限

https://aws.amazon.com/sqs/faqs/

为了只处理一次,您需要使用具有反应用程序ID的FIFO队列。

如果您的吞吐量要求低于上述限制,那么您可以使用FIFO队列。

如果不是这样,那么使用DynamoDB作为您的原始计划也是一种替代选择。但是在这里,你必须用这种方法自己管理很多事情,比如删除消息,如果消息正在阅读但尚未完全处理,则进行更新,等等。

孟修竹
2023-03-14

FIFO SQS队列与常规SQS队列具有不同的速率限制,无论消息组ID的使用如何

SQS标准队列支持每一API操作(SendMessage、ReceiveMessage或DeleteMessage)每秒几乎无限次的API调用。

FIFO SQS支持每种API方法300 TPS

看看这里的配额文件

此外,AWS有一个新功能,用于更高吞吐量的FIFO SQS队列,这可能会引起您的兴趣

通过每个API调用最多批处理10条消息,您可以使用FIFO队列每秒处理3000条消息

关于确保您不会两次处理相同的消息-您是否查看过FIFO重复数据删除ID?我不确定这是否正是您需要的,但听起来与您的要求非常相似

 类似资料:
  • 我使用SQS作为视频编码的队列,并希望确保每个视频只执行一次编码。 SQS工作得很好,因为当消息排队时,它只能由单个线程接收。然而,对于相同的视频/编码,可能会向队列发送多条消息,这意味着对于特定的“编码”队列,消息内容将是相同的。 是否需要消除重复以确保对于特定队列,队列中的消息或从队列接收的消息是唯一的? 我想的一个选择是在消息发送时为每种编码类型创建一个新队列。所以队列可以命名为,它只有一条

  • 在大数据存储中,IOPS和吞吐量之间的关键区别是什么

  • 我有一个测试,它可以做以下几点 我在一个吞吐量控制器中有一个GET请求。对于这个请求,我使用正则表达式提取器获取请求属性的值 如果我在一个吞吐量控制器中有两个请求,我就能够做到这一点。但是,如果我在2个不同的吞吐量控制器中有2个请求,同样的情况就不起作用了。 有人能帮忙吗?

  • 我有一个类女巫负责向客户端发送数据,所有其他类在需要发送数据时都使用这个。让我们称之为“数据ender.class”。 现在客户端要求我们将吞吐量控制在每秒最多50次调用。 我需要在这个类上创建一个algoritm(如果可能的话),以保持当前秒的调用次数,如果它达到50的最大值,保持进程要么睡眠或某事,并继续而不丢失数据。也许我必须实现一个队列或比简单的睡眠更好的东西。我需要建议或遵循的方向。 为

  • 所以我想渲染数组,但它一直在说,警告:列表中的每个孩子都应该有一个唯一的“键”道具,即使它有唯一的键,我的数组包含三个元素,它甚至没有正确渲染第三个数组,按钮没有甚至因为某种原因第三李的工作。 更新:我从firebase获得的数据如下所示: 此代码将选择每个数据的标题 当我将鼠标悬停在“fikka-fikka”上时,“fikka-fikka”的按钮甚至不起作用。在ed sheeran和一个方向上,

  • 总的来说,我认为我对延迟和吞吐量之间的区别有很好的理解。但是,对于Intel Intrinsics,延迟对指令吞吐量的影响我还不清楚,尤其是在顺序(或几乎顺序)使用多个内在调用时。 例如,让我们考虑: 这有11个延迟,在Haswell处理器上的吞吐量为7。如果我在循环中运行这条指令,我会在11个循环后获得每个循环的连续输出吗?由于这需要一次运行11条指令,并且由于我的吞吐量为7,我是否用完了“执行