1

私は、さまざまなプロデューサから毎秒何千ものレコードを収集し、それらをAWS firehoseを使用した弾性検索にプッシュする必要があります。また、Firehoseにデータ変換ラムダを使用しています。これは、レコードをFirehoseに戻す前に相当量の計算を行います。AWS Firehoseデータ変換の並行処理の制限

ファイアホースは、データがバッファリングされて宛先に配信される前に、バッファリングされた各バッチを非同期的に呼び出すことになっています。

私は15秒間毎秒4kレコードの入力速度で基本テストを実行しましたが、ここでシステムがどのように応答しましたか。消防ホースの指標を見ると

Firehose CloudWatch Metrics Firehose CloudWatch Metrics

Lambda CloudWatch Metrics Lambda CloudWatch Metrics

、すべての着信イベントを処理するために多くの時間よりも消防ホースを取ったことは明らかです。ラムダスロットル(図2)がないので、Firehoseが入力レートに追いつくためにできるだけ多くのラムダを実行しなかったのはなぜだろうか?

2番目の図に示すように、1分あたり約30回のラムダ呼び出しがあり、平均処理時間は8000msです。

私はfirehoseがラムダを同時に実行するかどうか疑問に思っていますか?私が紛失しているfirehose-lambda並行処理制限はありますか?

+0

はVPCで実行中のラムダですか?これまでラムダ - ファイアホースの統合を行っていないので、私は尋ねています。そうであれば、VPCに十分なENIがない可能性があります。 –

+0

いいえ、それはVPCで動作していません – user2736527

答えて

1

各ラムダイベントソースは原則として1ラムダインスタンスに関連付けられます。これは、データの正しい順序付けが確実に処理されるようにするためです。

データの順序が正しいことが保証されないためにスループットを向上させたい場合は、ラムダ関数内から(同じ引数を渡して) "InvokeAsync"を使用できます。このようにラムダを2度目に呼び出すと、今回は非同期になり、期待通りにスループットが向上します。同様の問題を詳述

ブログの記事は、ここで見つけることができます:https://medium.com/retailmenot-engineering/building-a-high-throughput-data-pipeline-with-kinesis-lambda-and-dynamodb-7d78e992a02d

+0

あなたの答えはありがとう、私はこのブログのポストに出くわしましたが、lambdaを非同期的に呼び出すことは、イベントをFirehoseに戻す必要があるため、私のユースケースでは機能しません – user2736527

+0

キネシスのストリームはシャードごとに1ラムダインスタンス、おそらくスループットを向上させる方法かもしれない?それ以外の場合は、サポートに連絡することをお勧めします – Exelian