我知道网络上有很多关于这个问题的资料,但是没有一个能够对像我这样的新手讲解得非常清楚...如果有人能帮助我理解这两个服务之间的主要区别,并且提供真实生活中的例子,那就非常感激了。谢谢!
我知道网络上有很多关于这个问题的资料,但是没有一个能够对像我这样的新手讲解得非常清楚...如果有人能帮助我理解这两个服务之间的主要区别,并且提供真实生活中的例子,那就非常感激了。谢谢!
Amazon SQS是一个队列。基本流程如下:
因此,一旦消息被处理,它就会被删除。
在Amazon Kinesis中,消息被发送到一个流中。流被分成分片(把它们看作为小流)。当接收到消息时,Kinesis将消息按顺序存储。然后,工作者可以从流的开头请求一条消息,或者从流的特定位置请求消息。例如,如果已经处理了5条消息,则可以请求第6条消息。消息在流中保留一段时间(如24小时)。
我喜欢把它想象成一条电影胶片-电影中的每一帧都按顺序排列。您可以从开头播放电影,也可以快进到中间开始播放。此外,您还可以倒回到较早的部分并重新观看。对于Kinesis流而言,同样适用,并且多个消费者可以同时从不同部分读取流。
那么,该选择哪种呢?
https://sookocheff.com/post/aws/comparing-kinesis-and-sqs/
但基本上,如果你不知道需要哪一个,请从SQS开始,直到它不能满足你的需求。SQS易于设置和使用,并且几乎不需要经验即可使用。
Kinesis需要更多的时间和专业知识才能设置并使用,因此除非您需要它,否则不要费心——尽管它可以用于与SQS类似的许多事情。
一个重要的区别是,如果您有多个消费者从队列中读取,那么每个消费者只会看到他们消费的消息-因为其他消费者将被阻止看到它们;而Kinesis可以让多个消费者同时访问流,每个消费者都可以查看整个流-因此,SQS适合将大量任务分配给许多消费者并行处理(以及其他事情),而Kinesis则可以让多个消费者读取并查看流中的所有数据。
链接的文章比我解释得更好。
根据我的实际经验,我尝试给出一个简单的答案:
将SQS视为临时存储服务。使用情况:
将Kinesis视为大量实时数据收集器。使用情况:
注:请注意,这两个服务都可以很容易地与Lambda函数集成,因此有很多用例可以使用SQS和Kinesis解决。无论如何,我试图列出一些用例,在这些用例中,我发现其中一个表现比另一个更好。希望有所帮助:)