Kinesis 和 SQS 有什么区别?

wan*_*ngt 5 amazon-sqs amazon-web-services amazon-kinesis

我知道网上有很多关于这个问题的材料,但是我还没有找到任何可以向我这样的菜鸟解释清楚这个问题的材料......如果有人能帮助我理解这两种服务之间的主要区别,不胜感激用例与现实生活中的例子。谢谢!

Joh*_*ein 7

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

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

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

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

我喜欢把它想象成一个电影片段——电影中的每一帧都井井有条。您可以从头开始播放一部电影,也可以快进到中间并从那里开始播放。此外,您可以带到较早的部分并观看它。Kinesis 流也是如此,多个使用者可以同时从流的各个部分读取。

那么,该选择哪个?

  • 如果一条消息被使用一次然后被丢弃,队列可能是更好的选择。
  • 如果保留消息顺序很重要和/或消息将被多次使用,那么可能更好。


E.J*_*nan 5

这篇文章总结得很好,我认为:

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

但基本上,如果您不知道需要哪一个,请从 SQS 开始,直到它无法满足您的要求为止。SQS 的设置和使用非常简单,几乎不需要任何经验就可以很好地使用它。

Kinesis 需要花费更多的时间和专业知识来设置和使用,因此除非您需要它,否则不要打扰 - 即使它可以用于许多与 SQS 相同的事情。

与 SQS 的一个很大的区别是,如果您有多个消费者从队列中读取数据,那么每个消费者只会看到他们消费的消息 - 因为其他消费者将被阻止看到它们;借助 Kinesis,许多消费者可以同时访问流,并且每个消费者都可以看到整个流 - 因此 SQS 非常适合承担大量任务并向许多消费者分发碎片以并行处理(除其他外) ),与 Kinesis 一样,多个使用者可以读取和查看整个流,并对流中的所有数据执行某些操作。

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