AWS Lambda是否按顺序执行操作?Kinesis消息处理场景技术咨询
Lambda处理Kinesis消息的顺序性问题解答
先给你一个明确结论:Lambda不会全局按顺序处理所有Kinesis消息,但在单个Kinesis分片内部,消息是严格按顺序执行的。
下面给你拆解具体逻辑和注意事项:
- Kinesis的消息是按「分片」来组织的,每个分片里的消息是严格按写入顺序排列的。当Lambda和Kinesis集成时,Lambda会给每个分片分配独立的执行容器,而且在同一个分片里,Lambda会按消息的到达顺序逐个处理,绝不会并行处理同一个分片内的消息——也就是说,上一批消息处理完,才会拉取下一批。
- 你提到每秒400条消息的量级,Lambda会根据Kinesis的分片数量和每个分片的消息吞吐量自动扩缩容。比如如果你的Kinesis流有3个分片,Lambda就会同时启动3个执行实例分别处理这3个分片的消息,但每个分片内部的顺序丝毫不乱。
- 如果你的业务要求所有消息必须全局严格按顺序,那只能把Kinesis流设成1个分片。单个分片的承载能力是写入1000条/秒或1MB/秒,你的400条/秒完全没问题,但后续流量增长的话,这种方式会直接卡住吞吐量,不太推荐。
给你两个实用建议:
- 如果只是特定业务链路的消息需要顺序(比如同一个用户的操作日志、同一份订单的状态变更),那在写入Kinesis时,给这类消息指定相同的
Partition Key,它们就会被路由到同一个分片,Lambda处理时自然能保证顺序,同时其他分片的消息可以并行处理,兼顾了顺序性和吞吐量。 - 如果业务允许不同分片的消息并行处理,只需要分片内顺序,那默认的Lambda+Kinesis集成方式就完全够用,Lambda会自动调整执行实例数,不用额外配置。
另外补充个细节:Lambda会批量拉取Kinesis消息(默认一次拉100条),但同一个批次里的消息也是按顺序的,而且必须等整个批次处理完成,才会拉取下一批,所以分片内的顺序是绝对有保障的。
内容的提问来源于stack exchange,提问作者Sal
相关产品推荐
相关产品推荐

