如何解决我的 Lambda 函数中 DynamoDB Streams 存在的问题?

2 分钟阅读
0

我想通过我的 AWS Lambda 函数使用 Amazon DynamoDB Streams 或解决存在的问题。

解决方法

以下是使用带 Lambda 函数的 DynamoDB Streams 时的常见问题:

DynamoDB 流作为触发器时,为什么我的 Lambda 函数无法扩展?

在 DynamoDB 表上打开 DynamoDB 流时,Amazon DynamoDB 会为每个分区关联一个分片。例如,如果您的 DynamoDB 表有 10 个分区,在此表上启用了 DynamoDB Streams,则您有 10 个分片。

如果表中的分区数量增加,则流中的分片数量也会增加。

DynamoDB 表上的每个分区最多可以处理 3000 个读取容量单位 (RCU)、1000 个写入容量单位 (WCU) 和 10 GB 数据。超出任何参数都会导致以下结果:

  • 向表中添加一个新分区。
  • 在 DynamoDB 流中创建一个新分片。

如何控制来自 DynamoDB 流的数据处理?

批处理大小和批处理窗口有助于控制流中的数据处理。

**批处理窗口:**设置调用之前等待记录的时间。批处理窗口可以控制来自 DynamoDB 流的数据处理。请注意,此行为取决于流中的数据可用性。

**批处理大小:**设置批次中的最大记录数。

在满足以下条件之前,不会调用 Lambda 函数:

  • 负载大小达到 6MB(同步调用限制)。
  • 批处理窗口达到最大值(在本示例中为 60 秒)。
  • 批处理大小达到最大值。

如何使用并行化因子来加快数据处理?

并行化因子允许更多的并发执行,可以快速处理大量记录。您可以设置并行化系数(默认: 1 到 10)增加已处理的分片数量。启用并行化因子时,请确保使用随机或唯一的分区键以实现最高吞吐量。

计算: 并行化系数(每个分片的并发批次)\ * 分片 = 并发执行

bisectBatchonFunctionError 设置是什么?

如果 Lambda 函数失败,当 BisectBatchonFunctionError 选项设置为时,批处理将拆分为两个部分。然后重试拆分的批次,直到找到问题记录为止。根据最大重试时间和记录时间设置来处理重试。

如果 重试尝试选项设置为 0,则不会尝试对失败的记录进行重试。在这种情况下,DynamoDB Stream 会丢弃失败的记录或将其发送到死信队列 (DLQ)(如果已配置)。

示例 1

在以下示例中,'p' 代表问题记录,重试次数设置0

批处理记录:\ [1,2,3p,4,5p]

拆分 1:\ [3p,4,5p]

拆分 2:\ [3p]\ [4,5p] 重试会丢弃\ [3p],因为它被识别为问题记录。如果已配置,还可以将其发送到 DLQ。

拆分 3:\ [4] 已处理。\ [5p] 被丢弃或发送到 DLQ(如果已配置)。

示例 2

在以下示例中,'x' 代表问题记录。重试次数设置为**\ -1 **。

已插入批处理记录:\ [1,2,3x,4,5x]

\ [3x,4,5x]

\ [3x,4,5x]

\ [3x,4,5x]

\ [3x,4,5x]

为什么我的 DynamoDB 直播的 Lambda 中的 IteratorAge 会增加?

以下是 Lambda 中 IteratorAge 增加的常见原因:

  • DynamoDB 直播中有一条不良记录。
  • 流中有大量的写入操作(PutItemBatchWriteItem)。Lambda 函数可能无法跟上处理高写入量的速度。如果出现这种情况,增加 DynamoDB 表的预置容量以增加每 1000 个 WCU 的分区数。增加预置容量会增加并发 Lambda 执行的次数。有关更多信息,请参阅上一节 DynamoDB Stream 作为触发器时为什么我的 Lambda 函数无法扩展?
  • DynamoDB 分区的数量有所下降,例如迁移到新账户或新表。
  • Lambda 函数中存在限制或函数错误。AWS Lambda 会重试记录,直到成功完成整个批处理或记录有效期到期。此外,DynamoDB Streams 会保留 24 小时。为避免数据丢失,最好设置 DLQ。如果配置了 DLQ,在停用完成或记录有效期到期后,AWS Lambda 会向 DLQ 发送失败的记录批次。
    要解决 Lambda 函数错误,请查看 Amazon CloudWatch 日志,了解有关错误的详细信息。
  • Lambda 函数的持续时间有所增加。
  • 必须优化错误处理和并行化系数。

有关详细信息,请参阅为什么我的 Lambda iteratorage 指标会增加?如何减少指标?

AWS 官方
AWS 官方已更新 1 年前