我有一个用例,我必须每秒从不同的制作人那里收集数千条记录,并使用AWS firehose将它们推送到弹性搜索。我还在firehose上使用数据转换lambda,它在将记录传递回firehose之前进行了大量的计算。
Firehose应该异步调用每个缓冲批处理的lambda,然后再次缓冲数据以传递到目标。
我进行了一项基本测试,其入口速率为每秒4k条记录,持续15分钟,以下是系统响应的方式。
查看firehose指标,很明显,需要花费一个多小时来处理所有传入的事件。由于没有任何lambda油门(图2),所以我想知道为什么Firehose没有运行尽可能多的lambdas以便能够跟上输入速率?
如第二张图所示,我每分钟约有30次lambda调用,平均处理时间为8000ms。
所以我想知道firehose是否同时运行lambda?是否有我失踪的firehose-lambda并发限制?
答案 0 :(得分:1)
每个Lambda事件源原则上都与1个Lambda实例相关联。这是为了确保处理数据的正确排序。
如果要以不保证数据的正确排序为代价来增加吞吐量,可以使用lambda函数内部的“InvokeAsync”(传递相同的参数)。这样你第二次调用lambda,这次是异步的,这将按预期增加吞吐量。
可以在此处找到详细说明类似问题的博文:https://medium.com/retailmenot-engineering/building-a-high-throughput-data-pipeline-with-kinesis-lambda-and-dynamodb-7d78e992a02d