dynamodb 流由分组为分片的流记录组成。碎片可以生成子碎片以响应 dynamodb 表上的大量写入。所以你可以有父分片,也可以有多个子分片。为确保您的应用程序以正确的顺序处理记录,父分片必须始终在子分片之前处理。这在docs中有详细描述。
不幸的是,发送到 AWS Lambda 函数的 DynamoDB Streams 记录是严格按分片序列化的,并且不能保证跨不同分片的记录顺序。
来自 AWS Lamda 常见问题解答:
问:AWS Lambda 如何处理来自 Amazon Kinesis 流和 Amazon DynamoDB 流的数据?
发送到您的 AWS Lambda 函数的 Amazon Kinesis 和 DynamoDB Streams 记录按分片严格序列化。这意味着如果您将两条记录放在同一个分片中,Lambda 保证您的 Lambda 函数将在使用第二条记录调用之前成功使用第一条记录调用。如果对一条记录的调用超时、受到限制或遇到任何其他错误,Lambda 将重试直到成功(或记录达到其 24 小时到期),然后再继续下一条记录。不保证跨不同分片的记录顺序,并且每个分片的处理是并行发生的。
如果您使用 DynamoDB Streams Kinesis Adapter,您的应用程序将根据此处的 DynamoDB 文档以正确的顺序处理分片和流记录。有关 DynamoDB Streams Kinesis Adapter 的更多信息,请参阅使用 DynamoDB Streams Kinesis Adapter 处理流记录。
因此,使用 dynamodb lambda 触发器并不能保证排序。您的其他选项包括使用 DynamoDB Streams Kinesis Adapter 或DynamoDB Streams Low-Level API,这需要更多的工作。