问题标签 [amazon-dynamodb-streams]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
603 浏览

scala - Spark Streaming Kinesis 集成:在 Worker 中初始化 LeaseCoordinator 时出错

在 scala 中使用 kinesis 应用程序运行简单的香草火花流时,我遇到了一些问题。我遵循了一些教程中的基本指导,例如SnowplowWordCountASL

然而,由于这个 Kinesis Worker 错误,我仍然无法使其工作:

这是我的代码示例:

我的 IAM 政策如下所示:

我无法理解这个应用程序有什么问题。任何有关此主题的指导将不胜感激。

0 投票
1 回答
548 浏览

json - boto3 dynamodb 传递 json 作为参数

所以下面的代码有效

但是我如何在运行时传递 json 而不是硬编码 myid 和 mylocation。我想将“{'myid':'123','mylocation:'paris'}”之类的内容作为 json 字符串传递给 put_item,Items。在 dynamodb 的 boto3 中这可能吗?

0 投票
2 回答
1441 浏览

python - 将数据插入dynamodb时出现python boto错误

我有一个带有 id 的简单表格测试

我正在尝试将 id 插入到具有字符串数据类型的表中。主分区键是 id(string)

我收到上面提到的错误。有什么建议么?

0 投票
1 回答
376 浏览

amazon-web-services - 多个实例使用的小表上的 Dynamo 流

我正在使用dynamodb来存储一个应用程序的配置,这个配置很可能一天改几次,会在几十行的量级。我的应用程序将部署到多个 EC2 实例。我最终将编写另一个应用程序来允许管理配置,同时通过直接在 AWS 控制台中对表进行更改来管理配置。

我正在尝试使用发电机流来监视配置的更改,当应用程序接收到要处理的记录时,它只是重新读取整个发电机表。

这在本地和部署到一个实例时有效,但是当我将它部署到三个实例时,它永远不会初始化 IRecordProcessor,并且不会对表进行任何更改。

我怀疑这是因为该表只有一个分片,并且 实例数不应超过分片数(至少对于 kinesis 流,我知道 kinesis 和 dynamo 流实际上是不同的)。

我知道如何在 kinesis 流中拆分碎片,但似乎无法找到一种方法来为 dynamo 流执行此操作。我读到,实际上,发电机流中的分片数等于发电机表中的分区数,您可以通过增加读/写容量来增加分区数。我不想增加吞吐量,因为这会很昂贵。

  1. 分片数应大于实例数的条件是否也适用于 dyanmo 流?如果是这样,是否有另一种方法来增加分片的数量,如果没有,是否有已知原因导致小型表上的发电机流在被多个实例读取时失败?
  2. 是否有更好的方法来存储和查看此类配置(最好使用 AWS 基础设施)?我要调查触发器。
0 投票
1 回答
4638 浏览

amazon-dynamodb - DynamoDB Streams with Lambda,如何按顺序处理记录(按逻辑组)?

我想使用 DynamoDB Streams + AWS Lambda 来处理聊天消息。关于同一会话user_idX:user_idY(房间)的消息必须按顺序处理。全局排序并不重要。

假设我以正确的顺序(房间:msg1、房间:msg2 等)提供 DynamoDB,如何保证 Stream 将按顺序提供 AWS Lambda,并保证跨单个流处理相关消息(房间)的顺序

例如,考虑到我有 2 个分片,如何确保逻辑组进入同一个分片?

我必须做到这一点:

而不是这个(消息尊重我保存在数据库中的顺序,但它们被放置在不同的分片中,因此错误地并行处理同一个房间的不同序列):

这个官方帖子提到了这一点,但我在文档中找不到如何实现它:

对单个主键所做的一系列更改的相对顺序将保留在分片中。此外,给定的密钥将出现在一组在给定时间点处于活动状态的同级分片中的至多一个中。因此,您的代码可以简单地处理分片中的流记录,以便准确跟踪项目的更改。

问题

1) 如何在 DynamoDB Streams 中设置分区键?

2)如何创建保证分区键一致交付的流分片?

3)这真的可能吗?由于官方文章提到:给定的密钥最多将出现在一组在给定时间点处于活动状态的同级分片中的一个中,因此似乎 msg1 可能会转到分片 1,然后 msg2 可能会转到分片 2,因为我的上面的例子?

编辑:这个问题中,我发现了这个:

您的流拥有的分片数量取决于表的分区数量。因此,如果您有一个包含 4 个分区的 DDB 表,那么您的流将有 4 个分片。每个分片对应一个特定的分区,因此具有相同分区键的所有项目都应该存在于同一个分区中,这也意味着这些项目将存在于同一个分片中。

这是否意味着我可以自动实现我所需要的?“具有相同分区的所有项目将出现在同一个分片中”。Lambda 尊重这一点吗?

编辑 2:来自常见问题解答

不保证跨不同分片的记录顺序,并且每个分片的处理是并行发生的。

我不关心全局排序,只是按照示例进行逻辑排序。不过,尚不清楚分片是否与常见问题解答中的此答案合乎逻辑。

0 投票
0 回答
671 浏览

encryption - 如何读取和解密 dynamodb 流更新事件?

我将我们的数据存储在 dynamodb 表中,并且在每次更新时,侦听器 lambda(在 Java 中)都会从 dynamodb 流中接收更新。我正在使用 JacksonConverter 解析 dynamodb 更新事件

但是,我想对表格中的 dynamodb 内容进行编码。所以,我不能直接使用 JacksonConverter。

我想知道是否有人对 dynamodb 流中的数据进行了解密,您是否使用过任何库?

我使用 DynamodbMapper 的 AttributeTransformer 来编码这些东西。我也可以用它来解密这个流的输出吗?

0 投票
1 回答
2578 浏览

python - AWS DynamoDB Stream python 转换原生格式

我有一个由 DynamoDB 流触发的 Lambda 函数。我的问题是收到的事件的奇怪格式(每个键/值的类型)。

是否存在将整个文档转换为本机 python 格式(没有任何类型)的解决方法。我正在寻找一个动态解决方案,因为将来我想将此 lambda 与其他具有不同格式的 DynamoDB 表流一​​起使用(多个 dict/list 级别)

例子:

谢谢

0 投票
2 回答
3775 浏览

amazon-dynamodb - DynamoDB 流是此用例的正确选择吗?

我有一个 DynamoDB 表,其中包含将由许多应用程序读取的键值对。在启动时,每个应用程序将读取整个表并将其缓存在内存中。

我要解决的问题是,如果 DynamoDB 表中的一个或多个项目已被修改,则让应用程序更新其缓存。

DynamoDB 流最初似乎是解决问题的正确方法。我已经按照 AWS 的建议使用 Kinesis 客户端库 (KCL) 实现了消费者。然而,在实施它时,我遇到了一些问题,让我相信我走错了路。具体来说:

  • 当我使用 KCL 创建一个新的消费者时,它会创建一个新的 DynamoDB 表来管理租约和检查点,这样当应用程序重新启动时,KCL 就会知道哪些记录已被使用,哪些没有。这不是我解决这个问题所需要的。应用程序离线时创建的任何流记录都无关紧要,因为在应用程序启动时会读取整个表。

  • 同一应用程序的多个实例同时运行。他们每个人都需要收到表更新的通知。要在 KCL 中实现这一点,我需要为每个应用程序分配一个唯一的应用程序名称。否则,他们将共享租用表,并且只有一个应用程序会收到通知。每个应用程序实例的一个表似乎不正确。此外,我还需要一些东西来删除未使用的表。

我还使用低级 API 来实现它。当只有一个分片时,它工作得很好。但是,我的实现不像 KCL 那样处理重新分片,所以它太脆弱了。对于我要解决的简单问题,必须实施重新分片处理似乎是错误的。

我开始考虑其他解决方案,例如:

  • 实现一个在更新表时触发的 lambda 函数。该函数向 SNS 主题发送通知。消费者在该主题上创建 SQS 订阅并通过该订阅获得通知。这个解决方案有太多我喜欢的活动部件。

  • 让应用程序定期重新读取整个表并确定自己是否进行了更改。这个解决方案感觉有点原始,但似乎是最简单的。

到目前为止,我考虑过的所有解决方案都有相当大的缺点。我错过了什么?

0 投票
2 回答
5167 浏览

amazon-web-services - “实时”DynamoDB 流如何?

我们正在试验一种新的无服务器解决方案,其中外部提供商向 DynamoDB 写入数据,DynamoDB Stream 对新的写入事件做出反应,并触发 AWS Lambda 函数来传播变化?

到目前为止,它运行良好,然而,有时我们会注意到数据被延迟,例如几分钟内 Lambda 没有更新。

在浏览了很多 DynamoDB Stream 文档之后,他们使用的唯一术语是“近实时流记录”,但通常“近实时”是什么?我们在这里看到的可能的延迟是什么?

0 投票
2 回答
1077 浏览

python-2.7 - 如何利用最少的读/写单元执行 AWS DynamoDB 备份和恢复操作?

我们正在寻找一种解决方案,它使用 DynamoDB 表的最小读/写单元来执行完整备份、增量备份和恢复操作。备份应存储在 AWS S3 中(对其他替代方案开放)。我们想到了几个选项,例如:

1) 使用 python 多处理和 boto 模块,我们能够执行完整的备份和恢复操作,它运行良好,但需要更多的 DynamoDB 读/写单元。

2) 使用 AWS Data Pipeline 服务,我们能够执行完整备份和还原操作。

3) 使用 Dynamo Streams 和 kinesis Adapter/Dynamo Streams 和 Lambda 函数,我们能够执行增量备份。

完整备份、增量备份和还原操作是否还有其他替代方法。主要限制/需要是通过利用 DynamoDb 表的最小读/写单元来获得可扩展的解决方案。