为什么我应该使用Amazon Kinesis而不是SNS-SQS?

228

我有一个使用情况,其中会有一系列的数据流进来,而我无法以相同的速度消耗它们,因此需要一个缓冲区。这可以使用SNS-SQS队列来解决。我了解到Kinesis也可以解决同样的问题,那么它们之间有什么区别?为什么应该选择(或不选择)Kinesis?

13个回答

5
我会补充一点其他人没有提到的事情 -- SQS 要昂贵几个数量级。

4
你确定吗?根据我的计算,Kinesis更贵,但我不擅长使用亚马逊简单价格计算器。 - Didier A.
3
假设您要向2个消费者发送每天1亿条消息。SNS成本为50美元/天。SQS成本为40美元/天/消费者或80美元/天。Kinesis的PUT成本为1.4美元/天,每个分片的成本为0.36美元/天。即使有100个分片(每秒100 MB入站,每秒200 MB出站),它的成本也只有3.60美元/天+1.40美元/天。因此,Kinesis的成本为每天4美元,而SNS/SQS的成本为每天130美元。 - Carlos Rendon
6
我很想知道为什么这个帖子里的费用有这样大的差异。 - Thomas
1
绝对正确!SQS仅适用于小记录和较低的输入速率(例如每秒10个记录,每个记录10KB)时更便宜。随着记录大小的增加,由于记录被分解为64KB大小的请求并计费请求数量,因此SQS变得非常昂贵。Kinesis将记录大小限制在1MB。另一方面,当记录速率增加时,与Kinesis相比,SQS的成本增长幅度更高。 - human
3
使用SQS定价的一个问题是,每1百万次请求的成本费率并非实际消息量,而是API操作数,其中1个请求= 1个API操作。要处理单个“消息”,必须执行至少3个API操作:1个发送+ 1个接收+ 1个删除。其他SQS功能,如更改可见性,将产生更多的API操作。这种意外的乘数相当恶劣,通常导致对于大型数据集(例如处理每个月1亿条消息)来说,与Kinesis Streams相比,SQS的价格高出2-10倍。 - Vlad Poskatcheev
显示剩余3条评论

1

由于这些服务不断变化和改进,我总结了Kinesis存在但在SQS中不存在的主要差距。

这些信息截至2023年4月仍然正确。

Kinesis实现了以下功能:

  1. 实时处理和分析数据。
  2. 回放过去365天内任何时间点的数据。
  3. 内置支持多个消费者同时消费相同的信息。(如果您连接SQS+SNS则可以获得类似的功能)

aws.amazon.com/kinesis/data-streams/faqs/


0
简单来说,不考虑成本的情况下,SNS-SQS的真正目的是使服务之间松耦合。这也是使用SQS的主要原因,其中消息的顺序并不重要,并且您对消息有更多的控制权。如果您想使用SQS来实现作业队列模式,那么它比Kinesis更好。在这种情况下,不应该使用Kinesis,因为从Kinesis中删除消息很困难,Kinesis会在出错时重新播放整个批次。您还可以将SQS用作死信队列以获得更多的控制权。使用Kinesis也可以实现所有这些功能,但除非您对SQS非常关键,否则很少听说过。
如果您想要一个良好的分区,那么SQS将不会有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接