AWS Lambda是否严格按顺序处理DynamoDB流事件?

时间:2018-04-24 17:46:45

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

我正在编写处理DynamoDB流中的项目的Lambda函数。

我认为Lambda背后的一点是,如果我有一大堆事件,它会启动足够的实例来同时通过它们,而不是通过单个实例顺序地提供它们。只要两个事件具有不同的密钥,我就可以对它们进行无序处理。

但是,我刚刚在Understanding Retry Behavior上阅读了此页面,其中写道:

  

对于基于流的事件源(Amazon Kinesis Data Streams和DynamoDB流),AWS Lambda会轮询您的流并调用您的Lambda函数。因此,如果Lambda函数失败,AWS Lambda会尝试处理错误的一批记录,直到数据到期为止,对于Amazon Kinesis Data Streams,最长可达7天。该异常被视为阻止,并且AWS Lambda将不会从流中读取任何新记录,直到失败的一批记录过期或成功处理。这可确保AWS Lambda按顺序处理流事件。

“AWS Lambda按顺序处理流事件”是否意味着Lambda无法同时处理多个事件?有没有办法让它同时处理来自不同键的事件?

2 个答案:

答案 0 :(得分:3)

对于 Kinesis 和 DynamoDB 事件源的 AWS Lambda 支持 Parallelization Factor,仍然保证每个分区键的顺序,但当 Concurrent batches per shard 设置为大于 1 时,不一定在每个分片内. 因此需要修改接受的答案。

答案 1 :(得分:1)

流记录按组或分片组织。

根据Lambda documentation,并发是在分片级别上实现的。在每个分片中,流事件按顺序处理。

  

基于流的事件源:用于处理Kinesis的Lambda函数   或者DynamoDB流的分片数是并发的单位。   如果您的流有100个活动分片,则最多只有100个Lambda   函数调用并发运行。这是因为Lambda   按顺序处理每个分片的事件。

根据Limits in DynamoDB

  

不允许两个以上的进程从同一个DynamoDB中读取   Streams同时碎片。超过此限制可能会导致   请求限制。