amazon-web-services - Kinesis 和 SQS 有什么区别?
问题描述
我知道网上有很多关于这个问题的材料,但是我还没有找到任何可以向像我这样的新手非常清楚地解释这个问题的材料......如果有人可以帮助我理解这两种服务之间的主要区别和带有现实生活示例的用例。谢谢!
解决方案
Amazon SQS是一个队列。基本流程是:
- 消息被发送到队列。他们在那里停留长达 14 天。
- 工作程序可以从队列中请求一条消息(或最多 10 条消息)。
- 从队列中检索消息时:
- 它留在队列中,但被标记为不可见
- 当 worker 处理完消息后,它告诉 SQS从队列中删除消息
- 如果工作人员在队列的不可见超时期限内没有删除消息,则消息重新出现在队列中以供另一个工作人员处理
- 如果需要,worker 可以定期告诉 SQS保持消息不可见,因为它仍在处理中
因此,一旦消息被处理,它就会被删除。
在Amazon Kinesis中,一条消息被发送到一个流中。流被分成碎片(将它们视为迷你流)。收到消息后,Kinesis按顺序存储消息。然后,工作人员可以从流的开头或从流中的特定位置请求消息。例如,如果它已经处理了 5 条消息,它可以请求第 6 条消息。消息在流中保留一段时间(例如 24 小时)。
我喜欢把它想象成电影胶片——电影中的每一帧都是有序的。您可以从头开始播放电影,也可以快进到中间并从那里开始播放。此外,您可以倒退到较早的部分并观看它。Kinesis 流也是如此,多个使用者可以同时从流的不同部分读取数据。
那么,该选哪个呢?
- 如果一条消息被使用一次然后被丢弃,那么队列可能是更好的选择。
- 如果保留消息顺序很重要和/或消息将被多次使用,那么流可能会更好。
推荐阅读
- javascript - this.setState 不起作用(我的状态是一个数字)
- hive - HIVE 创建表 sematicException 0:0
- ios - 如果我在另一个视图上添加子视图而不删除它,应用程序会挂起
- android - Android of Things 与 USB 外设通信
- jenkins - Groovy - readYaml() 期待 java.util.LinkedHashMap 而不是文件
- angular - 在 Angular 中使用 Ag-grid 加载动态模块的问题
- ajax - Symfony 2.5 - 如何从页面捕获信息以将其显示到其他页面?
- powershell - 连接到 localhost 时 Schedule.Service 出错
- javascript - react-pdf安装时出现webpack插件错误
- hbase - HBase 版本 1.X 和 2.X 有什么区别