データ基盤

Apache Airflowとは|同時に動かす数を4から8へ倍にしても、終了は1分も早まらなかった

同時に動かす数を増やすとどうなるか何が上限を決めているのか失敗したときに何が起きるか

処理60個の図を、同時に動かす数を変えて回しました。1個から4個にすると891分が275分になります。

そこから8個に倍増しても275分のままでした。稼働率だけが81.0%から40.5%に落ちます。

この記事の要点

  • 4個までは効く
  • 8個以降は0分の短縮
  • 下限は275分
  • やり直し0回だと30.4%

同時に動かす数を4から8へ倍にしても、終了は1分も早まらなかった

短縮できるのは依存をたどった最長の道のりまでです。そこから先は稼働率が落ちるだけでした。

Apache Airflowが扱うのは、順番と依存です。出典もその2つを挙げています。

説明は4つの処理A・B・C・Dを定め、それらが動く順番と、どの処理が何に依存するかを決めるというものです。

順番が決まっているなら、同時に動かせる数には上限があります。その上限を実際に測りました。

同時に動かす数を変える

処理60個の図を作りました。依存が終わった処理から、空いている担当に割り当てます

text
処理 60個。合計の作業時間 891分、依存をたどった最長の道のり 275分
依存が終わった処理から、空いている担当に割り当てる

同時に動かす数  全体の終了まで  1担当あたりの稼働率  1つ前からの短縮
1個                        891分               100.0%                 —
2個                        455分                97.8%              436分
4個                        275分                81.0%              180分
8個                        275分                40.5%                0分
16個                       275分                20.3%                0分
32個                       275分                10.1%                0分

1個から2個で436分、2個から4個で180分縮みました。ここまでは倍にした分が返ってきます

4個から8個は0分です。16個でも32個でも275分のまま動きません。

止まる位置は先に計算できる

275分は依存をたどった最長の道のりです。この道の上の処理は、どうやっても順番に動きます。

つまり担当を増やす前に、その値を計算しておけます。合計891分を最長の道のり275分で割ると3.2で、効くのは4個あたりまでという見当がつきます。

処理を並べる話そのものはジョブスケジューリングの記事でも測っています。

縮むのは4個まで。そこから先は動かない。

単位: 分8911個ずつ-4362個にする-1804個にする08個以上275最長の道のり処理60個・合計891分の図で実測。8個・16個・32個はいずれも275分だった。
図1 ── 同時に動かす数を増やしたときの短縮
出典Apache Airflow 公式ドキュメント「DAGs」(Core Concepts)2026-08-18 確認
It defines four Tasks - A, B, C, and D - and dictates the order in which they have to run, and which tasks depend on what others.
原文Apache Airflow 公式ドキュメント「DAGs」(Core Concepts) この内容の有効期限2027-02-18

1つの図に、動かすのに要るものを全部入れる

処理と依存だけでなく、いつ動かすか、失敗したらどうするかまで同じ場所に書きます。

Apache Airflowでは、まとまりをDAGと呼びます。出典はこれを次のように定めています。

DAGとは、あるひとまとまりの処理を実行するのに必要なものすべてを包み込んだ模型であるという言い方です。

「必要なものすべて」の中身は、おおよそ次の4つになります。

1つの図に入るもの

  1. 処理そのもの。何をするか
  2. 依存関係。どれが終わってから動くか
  3. 動かす間隔。いつ、どのくらいの頻度で始めるか
  4. 失敗したときの扱い。やり直すか、止めるか

3番目と4番目が同じ場所にあるのが要点です。間隔と失敗時の扱いを、処理の外から後付けしません

動かす前に要るもの

図を置くだけでは動きません。時刻を見て起こす役、処理を実行する役、状態を書き留める場所が要ります。

状態を書き留める場所は特に重要です。どこまで終わったかが残っていないと、途中から再開できません

書き留める場所が1つなので、そこが止まると全部止まります。ここだけは冗長化の対象に入れておくことになります。

出典Apache Airflow 公式ドキュメント「DAGs」(Core Concepts)2026-08-18 確認
A Dag is a model that encapsulates everything needed to execute a workflow.
原文Apache Airflow 公式ドキュメント「DAGs」(Core Concepts) この内容の有効期限2027-02-18

やり直し0回だと、60個を通せた日は30.4%しかなかった

1つ落ちれば先が止まります。1回のやり直しを入れるだけで30.4%が97.7%になりました。

Apache Airflowの既定では、依存する処理がすべて成功したときだけ次に進みます。出典もそう述べています。

既定では、DAGはある処理を、それが依存する処理がすべて成功したときにのみ動かすという記述です。1つ落ちれば、その先は動きません。

この性質は、処理の数が増えるほど効いてきます。1つあたりの失敗率が低くても、全部通る確率は下がります

やり直しの回数を変える

同じ60個の図で、1回あたり2%の確率で一時的に失敗するとしました。

text
処理 60個。1回あたり 2%の確率で一時的に失敗する
やり直す前に 5分待つ。全部成功しなければ、その日の結果は出ない

やり直しの回数  最後まで通った割合  やり直した回数(平均)  遅れ(平均)
0回                          30.4%                   0.00回          0.0分
1回                          97.7%                   1.19回         23.9分
2回                          99.9%                   1.23回         24.4分
3回                         100.0%                   1.24回         24.1分

やり直しなしでは30.4%です。7割の日は、どこかで止まって結果が出ません。

1回入れると97.7%になります。増えた手間は平均1.19回のやり直しと23.9分の遅れでした。

2回目以降はほとんど効かない

2回にすると99.9%、3回で100.0%です。伸びしろは2.2ポイントしかありません

やり直した回数も1.19回から1.24回までしか増えません。2回目を使う日がほとんどないためです。

同じ失敗が2回続くのは0.04%です。2回落ちたら一時的な失敗ではないと考えて、人が見るほうが早い場面もあります。

1回のやり直しで、通らない日が7割から2%台になる。

やり直しなし通った30.4止まった69.6100%1回まで97.7100%2回まで99.9100%3回まで100100%処理60個・1回あたり2%の失敗率で4000日ぶんを試した結果。
図2 ── やり直しの回数と、その日の結果
余談 この計測での注意

失敗は処理ごとに独立として置きました。実際には上流が落ちれば下流もまとめて落ちるので、独立ではありません。また2%という失敗率も置いた値です。ここで見せているのは、1つあたりが低くても数が多ければ全体は通らなくなることと、その打ち消しは1回のやり直しでほぼ済むという関係です。

出典Apache Airflow 公式ドキュメント「DAGs」(Core Concepts)2026-08-18 確認
By default, a Dag will only run a Task when all the Tasks it depends on are successful.
原文Apache Airflow 公式ドキュメント「DAGs」(Core Concepts) この内容の有効期限2027-02-18

よくある質問

同時に動かす数を増やせば早くなりますか
途中までです。この計測では4個までは効き、8個以降はまったく短くなりませんでした。
何が下限を決めていますか
依存をたどった最長の道のりです。275分がその値で、担当を何人増やしてもこれより短くなりません。
1つの処理が失敗するとどうなりますか
その先が止まります。既定では、依存する処理がすべて成功したときだけ次に進みます。
やり直しの設定は要りますか
要ります。1回2%の失敗でも、やり直しなしでは60個を通せた日が30.4%しかありませんでした。

まとめ

  • 依存関係を図として書く
  • 同時実行数は途中で効かなくなる
  • 下限は最長の道のり
  • やり直しは1回で足りる

今日から始められること

  1. いまの処理の依存関係を書き出す
  2. 依存をたどった最長の道のりを計算する
  3. 同時実行数がその手前で足りているか見る
  4. やり直しの回数を1回以上にする

実務で組んだApache Airflowのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る