Kinesis Stream和DynamoDB Streams之间的区别是什么?

44
他们似乎对我做着同样的事情。有人能解释一下它们之间的区别吗?
3个回答

59

两者的高级区别:

Kinesis Streams 允许您生产和消费大量数据(日志、网络数据等),而 DynamoDB Streams 是 DynamoDB 的一个本地功能,允许您跟踪 DynamoDB 表项的粒度更细的更改。

更多细节:

Amazon Kinesis Streams

enter image description here Amazon Kinesis Streams 是 AWS 的 Big Data 套件 中的一部分。从开发人员文档中了解:

您可以使用Streams进行快速和持续的数据摄取和聚合。所使用的数据类型包括IT基础设施日志数据、应用程序日志、社交媒体、市场数据源和Web点击流数据。以下是使用Streams的典型情况:
加速日志和数据源摄入和处理... 实时指标和报告... 实时数据分析... 复杂的流处理...
DynamoDB Streams DynamoDB Logo DynamoDB是AWS的NoSQL选项。它的交付单元是存储项目的。 DynamoDB Streams是您可以在表级别上启用的DynamoDB功能,以记录所有项目的所有更改(按发生顺序)。然后可以随着更改的发生实时流式传输,而不会对性能产生影响。当您打开该功能时,您可以选择将什么写入流中:
  • 仅键值——仅包括修改项的键属性(包括LSI),但无法添加其他内容。
  • 新图像——整个修改后的项。
  • 旧图像——整个修改前的项。
  • 新和旧图像——项的新旧两个版本。

DynamoDB Streams通常用于复制或表格审计。更多信息可以在DynamoDB streams开发人员指南中找到。

DynamoDB Streams强制执行的主要限制包括:

  • 仅允许1或2个消费者(超过这个数目,需要使用扇出模式
  • 仅保留24小时。虽然所有更改都被记录下来,并且按照严格的顺序进行,但是有一个硬性限制——您需要快速抓取它们并进行处理。
我能理解如果你先看到了这篇文章,可能会感到困惑。文章中提到它们很相似,但实际上它们是不同的服务,只是共享相似的API调用。因此,使用体验非常相似。

2
太棒了!那篇文章就是我感到困惑的地方。谢谢! - Junji Zhi
虽然有点晚了,但如果在更新数据库源(如DynamoDB甚至RDS实例)之前在Kinesis中消耗数据,您也可以进行复制和表审计,对吗?这只是更多的应用程序级别的责任。 - Will C
@WillC - 是的 - DynamoDB 流应该审计所有来源的内容。 - Taterhead
另外再补充一点,你也可以使用Kinesis记录DynamoDB中的更改。 - Sahil
与DynamoDB流相比,DynamoDB -> Kinesis流是否不保持顺序并导致重复项? - variable
@变量KDS可以有重复项,因为它提供“至少一次传递”,除非您的KDS只有一个不可扩展的分片,否则无法保证排序。 - Lee Hannigan

12
以下是比较Kinesis Data Streams for DynamoDB和DynamoDB Streams的区别:
属性 Kinesis Data Streams for DynamoDB DynamoDB Streams 数据保留时间 长达1年 24小时 KCL支持 KCL 1.X和2.X版本都支持 KCL 1.X版本支持 消费者数量 每个shard最多支持5个同时消费者,或使用增强扇出可支持每个shard最多20个同时消费者 每个shard最多支持2个同时消费者 吞吐量配额 无限制 根据DynamoDB表和AWS区域的吞吐量配额 记录交付模型 通过GetRecords的HTTP拉模型进行记录交付,并且通过SubscribeToShard使用增强扇出时,Kinesis Data Streams会通过HTTP/2推送记录。 通过GetRecords的HTTP拉模型进行记录交付。 记录排序 每个流记录上的时间戳属性可用于标识DynamoDB表中更改发生的实际顺序。 对于在DynamoDB表中修改的每个项,流记录以与实际修改项相同的顺序出现。 重复记录 流中可能偶尔会出现重复记录。 流中不会出现重复记录。 流处理选项 使用AWS Lambda、Kinesis Data Analytics、Kinesis数据firehose或AWS Glue流ETL处理流记录。 使用AWS Lambda或DynamoDB Streams Kinesis适配器处理流记录。 耐久性级别 提供自动故障转移而不中断的可用性区域。 提供自动故障转移而不中断的可用性区域。

-1
Kinesis 流是一种基本的队列,您可以将数据输入到其中,并允许您的消费者从中读取数据。这只是一个具有诸如分片/分区等高级功能的队列。
DynamoDB 流只是由 AWS 实现的内部队列,可捕获您想要的表的所有数据更改。这里的用例是您使用记录级别的更改,并使用该更改执行所需操作,例如“客户更新其首选项/地址”,“客户取消了订单”,您明白的。
您只需决定哪种更容易使用和维护。您想自己处理队列,还是只想使用 DynamoDB 转储您的键/值,然后仅在更改/插入/删除任何内容时才让您的消费者执行某些操作。

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