我正在编写处理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无法同时处理多个事件?有没有办法让它同时处理来自不同键的事件?
答案 0 :(得分:3)
对于 Kinesis 和 DynamoDB 事件源的 AWS Lambda 支持 Parallelization Factor,仍然保证每个分区键的顺序,但当 Concurrent batches per shard 设置为大于 1 时,不一定在每个分片内. 因此需要修改接受的答案。
答案 1 :(得分:1)
流记录按组或分片组织。
根据Lambda documentation,并发是在分片级别上实现的。在每个分片中,流事件按顺序处理。
基于流的事件源:用于处理Kinesis的Lambda函数 或者DynamoDB流的分片数是并发的单位。 如果您的流有100个活动分片,则最多只有100个Lambda 函数调用并发运行。这是因为Lambda 按顺序处理每个分片的事件。
不允许两个以上的进程从同一个DynamoDB中读取 Streams同时碎片。超过此限制可能会导致 请求限制。