Apo*_*orv 146 amazon-sqs amazon-web-services amazon-kinesis
我有一个用例,会有数据流来,我不能以相同的速度消耗它,需要一个缓冲区.这可以使用SNS-SQS队列来解决.我开始知道Kinesis解决了同样的目的,那有什么区别?为什么我更喜欢(或不应该更喜欢)Kinesis?
Roe*_*rel 73
请记住,这个答案在2015年6月是正确的
在研究了这个问题一段时间后,考虑到同样的问题,我发现SQS(带有SNS)是大多数用例的首选,除非消息的顺序对你很重要(SQS不保证消息上的FIFO).
Kinesis有两个主要优点(1)您可以从多个应用程序中读取相同的消息;(2)您可以在需要时重新阅读消息.
通过将SNS用作SQS的扇出,可以实现这两个优点.这意味着消息的生产者只向SNS发送一条消息,然后SNS将消息扇出到多个SQS,每个消费者应用程序一个.通过这种方式,您可以拥有所需的消费者,而无需考虑分割容量.
此外,我们又添加了一个订阅SNS的SQS,该SQ将保留14天的消息.在正常情况下,没有人从这个SQS读取,但是如果出现让我们想要倒回数据的错误,我们可以轻松地读取来自此SQS的所有消息并将它们重新发送到SNS.虽然Kinesis仅提供7天的保留期.
总之,SNS + SQS更容易并提供大多数功能.IMO你需要一个非常强大的案例来选择Kinesis.
kar*_*tik 51
Kinesis支持多种消费者功能,这意味着可以在不同消费者的24小时内同时或不同时间处理相同的数据记录,SQS中的类似行为可以通过写入多个队列来实现,消费者可以从多个队列中读取.但是,再次写入多个队列将在系统中增加子秒(几毫秒)延迟.
其次,Kinesis使用可以由特定EC2实例处理的分区密钥为不同分片选择性路由数据记录提供路由功能,并且可以启用微批量计算{Counting&aggregation}.
使用任何AWS软件都很容易,但SQS最容易.使用Kinesis时,需要提前提供足够的分片,动态增加分片数量以管理峰值负载,并减少管理所需的成本.它在Kinesis中很痛苦,SQS不需要这样的东西.SQS具有无限可扩展性.
Kon*_*ger 40
这些技术的语义不同,因为它们旨在支持不同的场景:
让我们通过例子来理解差异.
一旦一个项目的处理无法与处理另一个项目分开,我们必须具有Kinesis语义,以便安全地处理所有案例.
Mat*_*rry 30
对我来说最大的好处是Kinesis是一个可重放的队列,而SQS则不是.因此,您可以让多个消费者使用相同的Kinesis消息(或者在不同时间使用相同的消费者),使用SQS,一旦消息被激活,它就会从该队列消失.因此,SQS更适合工作队列.
小智 29
摘自AWS文档:
对于具有以下类似要求的用例,我们建议使用Amazon Kinesis Streams:
将相关记录路由到同一记录处理器(如流式MapReduce).例如,当给定密钥的所有记录都路由到同一记录处理器时,计数和聚合更简单.
订购记录.例如,您希望将日志数据从应用程序主机传输到处理/归档主机,同时保持日志语句的顺序.
多个应用程序能够同时使用相同的流.例如,您有一个应用程序可以更新实时仪表板,另一个应用程序可以将数据存档到Amazon Redshift.您希望两个应用程序同时并独立地使用来自同一流的数据.
能够在几小时后以相同的顺序使用记录.例如,您有一个计费应用程序和一个审计应用程序,它运行在计费应用程序后面几个小时.由于Amazon Kinesis Streams最多可存储7天的数据,因此您可以在结算应用程序后最多7天运行审计应用程序.
对于具有以下类似要求的用例,我们建议使用Amazon SQS:
消息传递语义(例如消息级别的确认/失败)和可见性超时.例如,您有一个工作项队列,并希望独立跟踪每个项目的成功完成情况.Amazon SQS跟踪ack/fail,因此应用程序不必维护持久检查点/游标.在配置的可见性超时后,Amazon SQS将删除已确认的消息并重新发送失败的消息.
个人消息延迟.例如,您有一个作业队列,需要延迟安排单个作业.使用Amazon SQS,您可以将单个邮件配置为最多延迟15分钟.
在读取时动态增加并发/吞吐量.例如,您有一个工作队列,并希望添加更多读者,直到清除积压.使用Amazon Kinesis Streams,您可以扩展到足够数量的分片(但请注意,您需要提前提供足够的分片).
利用Amazon SQS透明扩展的能力.例如,由于偶尔的负载高峰或业务的自然增长,您可以缓冲请求和负载变化.由于每个缓冲的请求都可以独立处理,因此Amazon SQS可以透明地扩展以处理负载,而无需您提供任何配置说明.
Den*_*kem 15
另一件事:Kinesis可以触发Lambda,而SQS则不能.因此,使用SQS,您必须提供EC2实例来处理SQS消息(如果失败则处理它),或者您必须有一个预定的Lambda(不会向上或向下扩展 - 您每分钟只能获得一个) .
Sha*_*dan 10
Kinesis 用例
\n\nSQS 用例
\n\n定价模式不同,因此根据您的使用情况,一个或另一个可能更便宜.使用最简单的情况(不包括SNS):
插入当前价格而不考虑免费套餐,如果您以最大邮件大小每天发送1 GB邮件,Kinesis的费用将远高于SQS(Kinesis每月10.82美元,SQS每月0.20美元) .但如果你每天送1 TB,Kinesis便宜一些(每月158美元,而SQS每月201美元).
详细信息:SQS每百万个请求收费0.40美元(每个64 KB),因此每GB为0.00655美元.每天1 GB,每月不到0.20美元; 每天1 TB,每月略高于201美元.
Kinesis收取每百万请求0.014美元(每个25 KB),因此每GB 0.00059美元.每天1 GB,每月不到0.02美元; 每天1 TB,每月约18美元.但是,Kinesis每小时收费0.015美元.每秒每MB需要至少1个分片.每天1 GB,1个碎片将是充足的,因此每天将增加0.36美元,总费用为每月10.82美元.每天1 TB,您将需要至少13个碎片,每天再增加4.68美元,每月总费用为158美元.
小智 8
Kinesis在流数据的典型map-reduce场景中解决了map部分的问题.虽然SQS没有确定这一点.如果您有需要在密钥上聚合的流数据,kinesis会确保该密钥的所有数据都转到特定分片,并且可以在单个主机上使用该分片,这使得与SQS相比,密钥上的聚合更容易
小智 5
我还要再添加一个没有人提及的东西-SQS的价格要贵几个数量级。
| 归档时间: |
|
| 查看次数: |
60890 次 |
| 最近记录: |