Lambda Kinesis Stream消费者并发问题

时间:2019-05-10 06:10:12

标签: amazon-web-services aws-lambda amazon-kinesis

我有一个Lambda,事件源指向Kinesis Stream使用者。流中有30个分片。

我可以在lambda控制台上看到请求,在kinesis控制台的“增强的扇出”部分中可以看到指标,因此一切似乎都已正确配置。

但是,由于某种原因,我同时执行的lambda的执行上限为 10 ,我不知道为什么。大多数文档表明,当使用增强型扇出功能且lambda侦听流使用者时,则每个分片应运行一个lambda。

有人能解释lambda流使用者的并发工作原理吗?

1 个答案:

答案 0 :(得分:0)

我有几个指针,以防万一。首先是要确保您的lambda concurrency limit实际上超过10。默认值为1000,但应该没有问题。

有关lambda流使用者如何工作的解释,请在lambda docs上获取详细信息。

我在Kinesis Data Streams上经常看到的一件事是记录的分区键有问题。您可能知道,Kinesis Data Streams将发送所有记录with the same partition key to the same shard,因此可以按正确的顺序对其进行处理。如果将记录发送到任何分片(例如,使用简单的轮询),那么您将无法保证会按顺序处理它们,因为不同的分片被不同的处理器读取。

重要的是要确保您尽可能均匀地分配密钥。如果大多数记录具有相同的分区键,则其中一个分片将非常繁忙,而其他分片将无法获得通信。可能是您仅对分区键使用了10个不同的值,在这种情况下,您将仅向10个分片发送数据,并且由于lambda函数执行将仅与一个分片连接,因此,您只有10个并发执行

通过检查output of PutRecord可以知道您正在使用的分片ID。您还可以通过覆盖哈希机制来强制使用分片ID。在the SDK docs上有有关分区键处理和记录排序的更多信息。

还要确保您阅读了the troubleshooting guide,因为有时您可以同时获取由两个处理器处理的记录,因此您可能需要为此做好准备。

我不知道您的问题是否与这些指针有关,但是密钥分区是一个经常性的问题,因此我想对此发表评论。祝你好运!