从 kinesis 流/firehose 填充 dynamodb 表

Arr*_*uff 5 amazon-web-services amazon-dynamodb amazon-kinesis

问题

使用来自 kinesis 数据源(流或 firehose)的数据填充 dynamodb 表的推荐方法是什么?

当前工作流程

  • 数据被摄入 kinesis firehose
  • lambda 在写入 kinesis firehose 的每条记录上触发并将数据发送到 dynamodb

为什么

我想就此获得一些建议,因为

  • 我不确定这种方法是否会造成不必要的工作量。即我需要为 lambda 编写和维护代码
  • 我发现我可以将 redshift 或 s3 等配置为我的 kinesis 数据源的使用者。为什么我不能用 dynamodb 做同样的事情?是否有一个原因?其他人不使用这种工作流程吗?

Sin*_*dem 0

我的观点是,您的工作流程目前或多或少是正确的方法。我唯一要改变的是,我会使用 Kinesis Streams 而不是 Firehose。然后,您可以将流配置为 Lambda 事件源,并且可以选择配置批量大小。这将大大降低您的 lambda 成本,因为每个批次(例如 500 条记录的大小)将执行一次 lambda,而不是每条记录执行一次 lambda。AWS 文档中解释了详细信息 ( https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html )

我不太确定不提供 DynamoDB 作为目标的真正原因。我的猜测是;Kinesis 不知道您的内容的结构。Kinesis 的当前目标要么具有某种机制来根据其需求构建传入数据,要么根本不关心对象结构 (S3)。另一方面,DynamoDB 需要用户做出一些决定。这些架构决策对于每个表都非常重要(性能、成本、分区、访问模式等)。哪个字段将是您的分区键,您会使用排序键吗?您会格式化任何字段吗?您如何确保您的主键值是唯一的?每个字段的类型是什么(字符串、小数等)?我认为,Lambda 由于其灵活性而成为最适合这些决策的机制。

有一些自动化机制可以从数据本身推断架构(如 AWS Glue 使用),但在 DynamoDB 情况下,这并不简单。