Lambda で Kinesis Data Streams の ParallelizationFactor を上げても順序性は保証されますか
困っていた内容
Lambda のトリガーに Kinesis Data Streams を設定しています。
パフォーマンス向上のため「シャードあたりの同時バッチ」を1
から増やすことを検討していますが、順序性は保証されますか?
順序性は保証されるの?
シャードあたりの同時バッチ数(ParallelizationFactor
)を増やした場合も、パーティションキーレベルの順序性は保証されます。
Lambda が Amazon Kinesis Data Streams からのレコードを処理する方法 - AWS Lambda
シャードごとの同時実行バッチの数を増やしても、Lambda はパーティションキーレベルで順序立った処理を確実に行います。
一方で、シャード内の順序性は保証されないため、ワークロードに適しているか十分にご確認ください。
なお、ParallelizationFactor
を1
に設定した場合も、異なるシャード間の順序性は保証されません。
保証される順序性の範囲と設定について、十分に確認した上で、システムへの適用をご検討ください。
参考資料
- [初心者向け] Kinesis Data Streams に Lambda でデータを流す様子を理解するために図を書いた | DevelopersIO
- シャード数を増やさずに Kinesis Data Streams からトリガーされる Lambda の実行数を増やしたい時の対処方法 | DevelopersIO
- Lambda 関数のイテレータ時間メトリクスを減らしてください | AWS re:Post
シャードあたりの同時バッチ数を増やすと、Lambdaはパーティションキーレベルで順序どおりの処理を検証します
ParallelizationFactor
(Kinesis および DynamoDB Streams のみ) 各シャードから同時に処理するバッチの数。デフォルト値は 1 です。タイプ: 整数
値の範囲: 最小値 は 1 です。最大値は 10 です。
Kinesis データストリームの 1 つのシャードを複数の Lambda 呼び出しで同時に処理するには、ParallelizationFactor 設定を構成します。Lambda がシャードからポーリングする同時バッチの数は、1 (デフォルト)~10 の並列化係数で指定できます。例えば、ParallelizationFactor を 2 に設定すると、最大 200 個の Lambda 呼び出しを同時に実行して、100 個の Kinesis データシャードを処理できます (ただし、ConcurrentExecutions メトリクスに異なる値が表示される場合があります)。これにより、データボリュームが揮発性で IteratorAge が高いときに処理のスループットをスケールアップすることができます。シャードごとの同時実行バッチの数を増やしても、Lambda はパーティションキーレベルで順序立った処理を確実に行います。