我看到我的 AWS Lambda 函数的 IteratorAge 指标上升(或猛升)。为什么我的函数的迭代器年限会增加,我该如何降低该指标?
当 Lambda 函数无法高效处理写入调用该函数的流的数据时,该函数的迭代器年限就会增加。要降低函数的 IteratorAge 指标,您必须增加流处理吞吐量。
以下因素会影响函数的 IteratorAge 指标:
查看本文,了解每个因子如何影响迭代器年限。然后,根据您的用例重新配置函数或数据流,以缩短函数的迭代器年限。有关更多信息,请参阅 Working with AWS Lambda function metrics(使用 AWS Lambda 函数指标)。
较长的运行时持续时间会增加函数的迭代器年限。减少持续时间会增加函数的吞吐量,从而缩短函数的迭代器年限。
要缩短函数的运行时持续时间,请执行以下一项或两项操作:
1. 增加分配给函数的内存量。
2. 优化函数代码,以便减少处理记录所需的时间。
**注意:**有关更多信息,请参阅 AWS Lambda 和 AWS X-Ray 及分析 AWS Lambda 函数。
流中的分片数量较少会增加函数的迭代器年限。增加流中的分片数量会增加函数的吞吐量,从而缩短函数的迭代器年限。
要增加流的分片数量,请按照 Resharding a stream(重新分片流)中的说明进行操作。
**注意:**分片分割对函数的迭代器年限没有立即影响。现有记录仍保留在它们写入的分片中。这些分片必须在它们的迭代器年限缩短之前赶上分片积压的工作。有关更多信息,请参阅 Working with streams(使用流)。
如果函数的运行时持续时间与事件中的记录数无关,则增加函数的批处理大小会缩短函数的迭代器年限。
要增加函数的批处理大小,请按照 Configuring a stream as an event source(将流配置为事件源)中的说明进行操作。
**注意:**如果函数的持续时间取决于事件中的记录数,则提升函数的批处理大小不会缩短函数的迭代器年限。有关更多信息,请参阅 Working with streams(使用流)。
调用错误可能导致 Lambda 函数需要更长时间来处理事件或多次处理同一事件。由于事件记录是按顺序读取的,因此如果一批记录在每次重试时都会导致错误,则函数将无法处理后面的记录。在此情况下,迭代器年限随着记录年龄的增长而线性上升。
您的函数能够从容处理写入流的记录非常重要。在开发函数时,记录和检测代码可以帮助您诊断错误。
有关更多信息,请参阅以下内容:
由于事件记录是按顺序读取的,因此如果当前调用受到限制,则函数无法前进到以后的记录。在此情况下,当 Lambda 重试受限制的调用时,迭代器年限将提升。
要管理 Lambda 函数的节流,您可以在函数中请求提高并发或查看性能问题。
测试并行化因子设置
您可以通过配置函数的并行化因子来增加流的每个分片的并发 Lambda 调用次数,从而改进流处理。您还可以指定 Lambda 从每个分片轮询的并发批处理次数。
例如,如果您的并行化因子设置为 10,则最多可以有 50 个并发 Lambda 调用来处理 5 个 Kinesis 数据分片。
有关更多信息,请参阅 Using AWS Lambda with Amazon Kinesis(将 AWS Lambda 与 Amazon Kinesis 结合使用)和 New AWS Lambda scaling controls for Kinesis and Amazon DynamoDB event sources(针对 Kinesis 和 Amazon DynamoDB 事件源的新 AWS Lambda 扩展控件)。
**注意:**增加每个分片的并发批处理次数时,Lambda 会在分区键级别管理按顺序处理。
使用增强的扇出
通过创建具有增强扇出功能的数据流使用者,您可以减少延迟并增加读取吞吐量。流使用者可以获得与每个分片的专用连接,这不会影响也在从流中读取数据的其他应用程序。
有关更多信息,请参阅 Developing custom consumers with dedicated throughput (enhanced fan-out)(开发具有专用吞吐量的自定义使用者(增强的扇出))和 Using AWS Lambda with Amazon Kinesis(将 AWS Lambda 与 Amazon Kinesis 结合使用)。
**注意:**如果您有许多应用程序读取相同的数据,或者您正在重新处理包含大量记录的流,则最好使用增强的扇出。
使用 AWS Lambda 函数的最佳实践
AWS Lambda 事件源映射
AWS Lambda 函数扩展
重新分片、扩展和并行处理
配置您的数据流和函数