如果我通过lambda处理流事件,我应该关心dynamodb流分片吗?

时间:2017-10-01 14:41:28

标签: java amazon-web-services lambda amazon-dynamodb amazon-dynamodb-streams

dynamodb documentation表示存在分片,需要首先进行迭代,然后对于每个分片,需要获取记录数。

文档还说:

  

(如果您使用DynamoDB Streams Kinesis适配器,则会为您处理:您的应用程序将以正确的顺序处理分片和流记录,并自动处理新的或过期的分片,以及在应用程序中分割的分片正在运行。有关更多信息,请参阅使用DynamoDB Streams Kinesis适配器处理流记录。)

好的,但是我使用lambda而不是kinesis(它们彼此相关?)如果lambda函数附加到dynamodb流,我应该关心分片吗?或者我应该编写labda代码并期望aws环境只将一些记录传递给该lambda?

2 个答案:

答案 0 :(得分:2)

使用Lambda使用DynamoDB Stream时,轮询API和跟踪分片的工作都会自动为您处理。如果您的表有多个分片,那么将调用多个Lambda函数。从您作为开发人员的角度出发,您只需编写Lambda函数的代码,其余部分将由您处理。

DynamoDB流仍然可以保证有序处理,因此使用单个分片只能一次调用Lambda函数的一个实例。但是,对于多个分片,您可能会看到Lambda函数的多个实例同时运行。这种扇出是透明的,如果您在编写Lambda函数时没有意识到这一点,可能会导致问题或导致令人惊讶的行为。

有关其工作原理的更深入说明,我建议您观看YouTube视频AWS re:Invent 2016: Real-time Data Processing Using AWS Lambda (SVR301)。虽然重点主要放在Kinesis Streams上,但消费DynamoDB Streams的概念同样适用,因为该技术几乎相同。

答案 1 :(得分:0)

我们每天使用DynamoDB处理近十亿条记录,并自动将这些记录发送到流中。

一切都由AWS负责,我们不需要做任何事情,除了配置流(你想要什么类型的图像)和添加触发器。

我们做的唯一微调是,

当您获得更多数据时,我们只是增加了批量大小以便更快地处理并减少对Lambda的调用次数的开销。

如果您使用任何外部进程迭代流,则可能需要执行相同操作。

<强>参考:

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html

希望它有所帮助。