在物联网传感器数据的 DynamoDB Streams 和 Kinesis Streams 之间进行选择

问题描述 投票:0回答:3

我有一个由 250 个支持 Wifi 的物联网传感器组成的队列,用于传输重量数据。每个设备每秒采样一次。我在选择 AWS DynamoDB Streams 和 AWS Kinesis Streams 之间请求帮助,以实时存储和处理这些数据。这里有一些额外的要求:

  • 我需要将所有原始数据保存在一个 SQL 可访问的表中。
  • 我还需要使用 Python 的 Pandas 库清理原始流数据,以识别基于重量变化的设备级事件(例如,如果传感器 #1 的重量增加,记录为“传感器 #1 增加 x lbs @ XX:XX PM”如果没有变化,什么都不做)。
  • 我需要可以在实时仪表板中访问更改事件数据(从原始数据流中用库解释)(例如,设备 #1 重量刚刚变为零,提示员工重新填充容器 #1)

DDB Streams 或 Kinesis Streams 都可以支持 Lambda 函数,这是我将用于数据清理的函数,但我已经阅读了文档和比较文章,无法区分哪个最适合我的用例。成本不是关键考虑因素。提前致谢!

aws-lambda streaming iot amazon-kinesis amazon-dynamodb-streams
3个回答
0
投票

不幸的是,我认为您需要一些基础设施才能获得完整的解决方案。

  1. 我认为您可以使用 Kinesis 和 firehose 写入数据库,以可以使用 SQL 查询的方式存储原始数据。
  2. 对于数据清理步骤,我认为您需要使用像flinkbytewax这样的状态流处理器,然后可以将转换后的数据写入实时数据库或返回到kinesis,以便可以使用在仪表板中。

0
投票

DynamoDB 流DynamoDB 一起工作。它流式传输行更改以供下游服务(如 Lambda)接收。您提到要将数据存储在 SQL 数据库中。 DynamoDB 是一个 NOSQL 数据库。所以你可以排除那个服务。

不确定为什么要在 SQL 数据库中存储数据。如果是时间序列数据,您可能会将它们存储到像 TimeStream.

这样的时间序列数据库中

如果您使用 AWS IoT Core 通过 MQTT 将数据发送到 AWS,您可以 将这些消息 转发到 Kinesis Data Stream(或 SQS)。然后,您可以在 Kinesis 中收到的消息上触发 lambda。这个 lambda 可以处理数据并将它们存储在你想要的数据库中。


0
投票

关于为什么选择一个而不是另一个的高度差异

属性 DynamoDB 的 Kinesis 数据流 DynamoDB 流
数据保留 长达 1 年。 24小时。
Kinesis 客户端库 (KCL) 支持 支持 KCL 版本 1.X 和 2.X. 支持 KCL 版本 1.X.
消费者数量 每个分片最多 5 个并发消费者,或者每个分片最多 20 个同时消费者,具有增强的扇出功能。 每个分片最多同时有 2 个消费者。
吞吐量配额 无限。 受 DynamoDB 表和 AWS 区域的吞吐量配额限制。
备案交付模式 使用 GetRecords 和增强的扇出功能通过 HTTP 拉取模型,Kinesis Data Streams 使用 SubscribeToShard 通过 HTTP/2 推送记录。 使用 GetRecords 通过 HTTP 拉取模型。
记录排序 每条流记录上的时间戳属性可用于识别 DynamoDB 表中发生更改的实际顺序。 对于 DynamoDB 表中修改的每个项目,流记录的出现顺序与项目的实际修改顺序相同。
重复记录 重复的记录可能偶尔会出现在流中。 流中不会出现重复记录。
流处理选项 使用 AWS Lambda、Kinesis Data Analytics、Kinesis data firehose 或 AWS Glue 流式 ETL 处理流记录。 使用 AWS Lambda 或 DynamoDB Streams Kinesis 适配器处理流记录。
耐用度 可用区提供不间断的自动故障转移。 可用区提供不间断的自动故障转移。
© www.soinside.com 2019 - 2024. All rights reserved.