AWS SQS + Akka Stream(Alpakka) の調査メモ

2020/05/19   #AWS  #SQS  #Scala  #Akka-Streams  #Alpakka 
このエントリーをはてなブックマークに追加

SQS 基本

SQS の代表的なパターンやクセをざっくり把握するには以下の記事がよかった。
Amazon SQSを使う前に知っておきたい基本的なこと
キューから取得できるデータの順序や重複について、可視性タイムアウトなど。

Source から受けたあとの処理は非同期に並列並行に動作するのか?

Source (今回想定しているのは SQS )からデータを受けたあと、そのデータを使って何か処理するわけだが、
当然その処理の実行時間は来るデータによって異なる。
時間のかかるデータ処理を行っている間に他のデータ処理も行ってくれるか、
当然そうなるんだろうけど、一応確認したかった。

AWS SQS • Alpakka Documentation
maxBatchSizemaxBufferSize という設定項目がある。

Be aware that the SqsSource runs multiple requests to Amazon SQS in parallel. The maximum number of concurrent requests is limited by parallelism = maxBufferSize / maxBatchSize. E.g.: By default maxBatchSize is set to 10 and maxBufferSize is set to 100 so at the maximum, SqsSource will run 10 concurrent requests to Amazon SQS.

SQS から一度に何個のキューをとってくるかなどの設定項目。
maxBufferSize / maxBatchSize 分並列で動く、とある。
デフォルトでは 100/10 で 10 並列らしい。

試してみた

cm-yamasaki-michihiro/akka-streams-sqs-example
をベースにし、
キューにデータを入れるのを0.1秒間隔に改変、
コンシューマーは処理時間がランダムでかかるように改変、
で実行してみると、結果がバラバラででてくるので、並列並行処理されているっぽい。