💭

Lambda × Kinesis の ParallelizationFactor を理解する

に公開

はじめに

AWS Lambda を Kinesis Data Streams のコンシューマーとして使っているときに登場するのが ParallelizationFactor というパラメータです。
今回はこれが何者なのか、どういうときに使うべきかを整理してみます。

Kinesis と Lambda の関係

Kinesis Data Streams はデータを シャード(Shard) 単位で分割して保持します。
Lambda をイベントソースマッピングで Kinesis に接続すると、通常は以下のように動きます。

  • 1シャードにつき 1 Lambda 実行環境
  • シャード内のレコードは順序を保ったまま処理される

つまり「シャードが処理単位」になっていて、1シャードの処理が遅ければ全体のパフォーマンスに影響する構造です。

ParallelizationFactor とは?

ParallelizationFactor は、1シャードあたりいくつの Lambda を並列に走らせるか を指定できるパラメータです。

  • デフォルト: 1(=従来どおり、1シャード=1Lambda)
  • 最大値: 10(1シャード=最大10Lambdaで並列処理可能)

例えば、シャード数が 2、ParallelizationFactor = 1 → 最大 Lambda 同時実行数 = 2 となり、シャード数が 2、ParallelizationFactor = 5 → 最大 Lambda 同時実行数 = 10 となります。

このように、スループットを一気に引き上げることが可能になります。

また、内部的には シャードをさらにセグメントに分割 し、それぞれを別の Lambda に処理させています。
そのため「シャード単位で順序を守る」という従来の保証は失われます。

メリット

ParallelizationFactor を使用するメリットは以下の通りです。

  • シャードごとの処理性能を大幅に引き上げられる
  • 大量データの処理でボトルネックになりにくい
  • Lambda のスケーリングをより柔軟に活用できる

注意点

ParallelizationFactor を使用する上での注意点は下記の通りです。

①順序性が保証されなくなる
1シャード内でもレコード処理がバラバラに実行されるため、処理順序が重要なユースケース(例: 金融取引やログの時系列処理)には不向きです。

②Lambda の同時実行数制限に注意
シャード数 × ParallelizationFactor の分だけ Lambda が立ち上がる可能性があります。例えば、10シャード × ParallelizationFactor=5 → 最大 50 同時実行が可能です。また、アカウントやリージョンの同時実行制限に引っかかることもあるので要設計が必要です。

まとめ

ParallelizationFactor について、まとめると以下の通りです。

  • ParallelizationFactor = 「1シャードあたりの Lambda 並列実行数」
  • デフォルトは 1、最大は 10
  • 高速処理したいときに有効
  • 順序性が必要な処理では使わない方がよい

シンプルにまとめると、「順序性を守るなら ParallelizationFactor = 1、
スピード優先なら ParallelizationFactor を上げてみる」というのが使い分けの指針になりそうです。

参考

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-kinesis.html

Discussion