AWS Kinesis + Lambda 函数:我可以在一个分片中同时调用一个 Lambda 函数的多个实例吗?
AWS Kinesis + Lambda Function: can I invoke multiple instances of one Lambda Function concurrently in one shard?
我有 一个 AWS Lambda 函数使用 Kinesis Data Streams 事件。根据 document 可以有多个并行的 Lambda 函数实例 运行,每个实例处理一个分片。多个 Lambda 函数实例同时处理同一个分片会发生这种情况吗?在样本中,batch size 为 2,一个实例正在处理 e_4 和 e_5,而同时另一个实例正在处理 e_2 和 e_3,这会发生吗? IMO 这不会发生,只有在 e_4 和 e_5 的调用完成后,另一个调用才会发生处理 e_2 和 e_3,我的理解是否正确?
是的。你是对的。 Kinesis - Lambda 触发器仅支持每个分片一个 lambda。
此外,这不是 AWS 限制,它对于像 kinesis 或 Kafka 这样的有序流来说很常见。有几件事可以强制执行此限制:
如果失败,您应该重置失败消息的偏移量。如果 lambda 已经开始处理失败消息之后的消息,您将重新发送消息(或者必须跳过失败消息)
通常选择键(散列)来保证有序处理。就像 orderid 是关键,流有顺序的动作。所有操作都应按正确顺序执行。
不,这不会发生。分片是 lambda 集成的并发单元。单个 lambda 函数的并发执行数从顶部开始受分片数限制,这意味着如果您有 10 个分片,那么单个 lambda 函数最多 10 个实例可以处理这些分片所属的流。
Your Lambda function is a consumer application for your data stream.
It processes one batch of records at a time from each shard.
To increase the speed at which your function processes records, add
shards to your data stream.
如果您不为 lambda 函数预留并发能力并且它正在其他地方用完,它可能会更少。
If your function can't scale up to handle one concurrent execution per
shard, request a limit increase or reserve concurrency for your
function. The concurrency available to your function should match or
exceed the number of shards in your Kinesis data stream.
请注意,您可能有不同的函数同时处理同一个流,上述限制仅适用于单个 lambda 函数的上下文。
You can create multiple event source mappings to process the same data
with multiple Lambda functions, or process items from multiple data
streams with a single function.
如果出于某种原因您需要使用相同的代码同时处理相同的分片,那么您需要创建 2 个包含相同代码的 lambda 函数并将它们与流集成,但请注意它们不会了解彼此的处理状态。
我有 一个 AWS Lambda 函数使用 Kinesis Data Streams 事件。根据 document 可以有多个并行的 Lambda 函数实例 运行,每个实例处理一个分片。多个 Lambda 函数实例同时处理同一个分片会发生这种情况吗?在样本中,batch size 为 2,一个实例正在处理 e_4 和 e_5,而同时另一个实例正在处理 e_2 和 e_3,这会发生吗? IMO 这不会发生,只有在 e_4 和 e_5 的调用完成后,另一个调用才会发生处理 e_2 和 e_3,我的理解是否正确?
是的。你是对的。 Kinesis - Lambda 触发器仅支持每个分片一个 lambda。
此外,这不是 AWS 限制,它对于像 kinesis 或 Kafka 这样的有序流来说很常见。有几件事可以强制执行此限制:
如果失败,您应该重置失败消息的偏移量。如果 lambda 已经开始处理失败消息之后的消息,您将重新发送消息(或者必须跳过失败消息)
通常选择键(散列)来保证有序处理。就像 orderid 是关键,流有顺序的动作。所有操作都应按正确顺序执行。
不,这不会发生。分片是 lambda 集成的并发单元。单个 lambda 函数的并发执行数从顶部开始受分片数限制,这意味着如果您有 10 个分片,那么单个 lambda 函数最多 10 个实例可以处理这些分片所属的流。
Your Lambda function is a consumer application for your data stream. It processes one batch of records at a time from each shard.
To increase the speed at which your function processes records, add shards to your data stream.
如果您不为 lambda 函数预留并发能力并且它正在其他地方用完,它可能会更少。
If your function can't scale up to handle one concurrent execution per shard, request a limit increase or reserve concurrency for your function. The concurrency available to your function should match or exceed the number of shards in your Kinesis data stream.
请注意,您可能有不同的函数同时处理同一个流,上述限制仅适用于单个 lambda 函数的上下文。
You can create multiple event source mappings to process the same data with multiple Lambda functions, or process items from multiple data streams with a single function.
如果出于某种原因您需要使用相同的代码同时处理相同的分片,那么您需要创建 2 个包含相同代码的 lambda 函数并将它们与流集成,但请注意它们不会了解彼此的处理状态。