Kinesis和SQS有什么区别?

10

我知道网络上有很多关于这个问题的资料,但是没有一个能够对像我这样的新手讲解得非常清楚...如果有人能帮助我理解这两个服务之间的主要区别,并且提供真实生活中的例子,那就非常感激了。谢谢!


这个回答解决了你的问题吗?流处理和消息处理的区别 - lee-pai-long
3个回答

21

Amazon SQS是一个队列。基本流程如下:

  • 消息被发送到队列中,可以在那里待上最多14天。
  • 工作程序可以从队列中请求一条(或者最多10条)消息
  • 当消息从队列中检索出来时:
    • 它仍然留在队列中,但被标记为不可见的
    • 当工作者完成处理消息后,它会告诉SQS从队列中删除该消息
    • 如果工作者在队列的不可见超时期内没有删除消息,则该消息重新出现在队列中供另一个工作者处理
    • 如果需要,工作者可以定期告诉SQS保持消息不可见,因为它仍在被处理

因此,一旦消息被处理,它就会被删除。

Amazon Kinesis中,消息被发送到一个中。流被分成分片(把它们看作为小流)。当接收到消息时,Kinesis将消息按顺序存储。然后,工作者可以从流的开头请求一条消息,或者从流的特定位置请求消息。例如,如果已经处理了5条消息,则可以请求第6条消息。消息在流中保留一段时间(如24小时)。

我喜欢把它想象成一条电影胶片-电影中的每一帧都按顺序排列。您可以从开头播放电影,也可以快进到中间开始播放。此外,您还可以倒回到较早的部分并重新观看。对于Kinesis流而言,同样适用,并且多个消费者可以同时从不同部分读取流。

那么,该选择哪种呢?

  • 如果消息仅使用一次,然后丢弃,则队列可能更好。
  • 如果保留消息顺序很重要和/或消息将被多次使用,则可能更好。

我非常喜欢这种解释某个概念的方式(在格式方面),尤其是在描述两个概念之间的区别时。我希望更多的答案都像这样。非常清晰、简洁,精确地使用加粗文本来突出重点。+1 - Hassan Ahmed

5
这篇文章总结得非常好,我认为:

https://sookocheff.com/post/aws/comparing-kinesis-and-sqs/

但基本上,如果你不知道需要哪一个,请从SQS开始,直到它不能满足你的需求。SQS易于设置和使用,并且几乎不需要经验即可使用。

Kinesis需要更多的时间和专业知识才能设置并使用,因此除非您需要它,否则不要费心——尽管它可以用于与SQS类似的许多事情。

一个重要的区别是,如果您有多个消费者从队列中读取,那么每个消费者只会看到他们消费的消息-因为其他消费者将被阻止看到它们;而Kinesis可以让多个消费者同时访问流,每个消费者都可以查看整个流-因此,SQS适合将大量任务分配给许多消费者并行处理(以及其他事情),而Kinesis则可以让多个消费者读取并查看流中的所有数据。

链接的文章比我解释得更好。


3

根据我的实际经验,我尝试给出一个简单的答案:

  1. SQS视为临时存储服务。使用情况:

    • 管理带有不同队列优先级的数据
    • 存储数据一段有限的时间
    • Lambda的死信队列(DLQ)
    • 通过长轮询降低成本
    • 创建FIFO
  2. Kinesis视为大量实时数据收集器。使用情况:

    • 来自不同来源的非常大量的数据流
    • 仅启用Firehose备份数据(您将免费获得数据湖)
    • 在收集阶段立即使用Kinesis分析集成获取统计信息
    • 拥有检查点,以在DynamoDB中跟踪已处理/失败的记录

注:请注意,这两个服务都可以很容易地与Lambda函数集成,因此有很多用例可以使用SQS和Kinesis解决。无论如何,我试图列出一些用例,在这些用例中,我发现其中一个表现比另一个更好。希望有所帮助:)


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