我有一个用例,在这个用例中,我必须每秒从不同的生产者收集数千条记录,并使用AWS firehose将它们推送到弹性搜索。我还在firehose上使用了一个数据转换lambda,它在将记录传递回firehose之前进行了大量的计算。
Firehose应该在数据被再次缓冲以传送到目的地之前,对每个缓冲的批处理异步调用lambda。
我在15分钟内以每秒4k条记录的入口率运行了一个基本测试,下面是系统的响应。


查看firehose指标,很明显,firehose花了一个多小时来处理所有传入的事件。因为没有任何lambda油门(图2),所以我想知道为什么Firehose没有运行尽可能多的lambda来跟上输入速率?
如第二张图所示,我每分钟有大约30次lambda调用,平均处理持续时间为8000ms。
所以我想知道firehose是否同时运行lambda?我是否遗漏了一些firehose-lambda并发限制?
发布于 2017-07-06 22:36:00
每个Lambda事件源原则上将与1个Lambda实例相关联。这是为了确保要处理的数据的正确排序。
如果您想要以不保证数据的正确排序为代价来增加吞吐量,您可以在lambda函数内部使用"InvokeAsync“(传递相同的参数)。这样,您就可以第二次调用lambda,这次是异步的,这将像预期的那样增加吞吐量。
可以在这里找到详细说明类似问题的博客文章:https://medium.com/retailmenot-engineering/building-a-high-throughput-data-pipeline-with-kinesis-lambda-and-dynamodb-7d78e992a02d
https://stackoverflow.com/questions/44265425
复制相似问题