1

我有一個使用案例,我必須從不同的生產者每秒收集數千條記錄,並使用AWS firehose將它們推送到彈性搜索。我還在流水線上使用了一個數據轉換lambda,它在將記錄傳回流水線之前進行了相當數量的計算。AWS Firehose數據轉換併發限制

Firehose應該在數據緩衝再次緩存到目的地之前異步調用每個緩衝批處理的lambda。

我跑了一個基本的測試,進入速度爲每秒4k記錄15分鐘,這裏是系統響應的方式。

Firehose CloudWatch Metrics Firehose CloudWatch Metrics

Lambda CloudWatch Metrics Lambda CloudWatch Metrics

在流水指標來看,很明顯,它採取了流水一個多小時來處理所有到來的事件。由於沒有任何lambda油門(圖2),所以我想知道爲什麼Firehose沒有運行儘可能多的lambda以便能夠跟上輸入速度?

如第二張圖所示,我每分鐘有大約30個lambda調用,平均處理時間是8000ms。

所以我想知道如果firehose同時運行lambda?是否有我缺少的firehose-lambda併發限制?

+0

是在VPC運行拉姆達?我在問,因爲到目前爲止我還沒有完成lambda-firehose集成。如果是,那麼您的VPC中可能沒有足夠的ENI? –

+0

不,它沒有運行在VPC – user2736527

回答

1

每個Lambda eventsource將原則上與1個Lambda實例相關聯。這是爲了確保正確處理數據的順序。

如果你想增加吞吐量,但是沒有保證數據將有正確的排序,你可以使用lambda函數內部的「InvokeAsync」(傳遞相同的參數)。這樣您再次調用lambda表達式,這次是異步的,這將按預期增加吞吐量。

博客中詳述了類似的問題,可以在這裏找到:https://medium.com/retailmenot-engineering/building-a-high-throughput-data-pipeline-with-kinesis-lambda-and-dynamodb-7d78e992a02d

+0

感謝您的回答,我遇到了這篇博文,但調用lambda異步不能用於我的用例,因爲我需要將事件推回到流水線 – user2736527

+0

Kinesis流將具有每個碎片1個lambda實例,也許這可能是一種提高吞吐量的方法?否則,聯繫支持可能是你最好的選擇 – Exelian