データ基盤

Spark Streamingとは|間隔を0.5秒にすると、時間の92.2%が固定の手間に消えた

まとめる間隔で何が変わるのかしおりはどれだけ細かく残すのか書き出し方で量はどう変わるのか

0.5秒ごとにまとめると、処理時間の92.2%が1回ごとの固定の手間に消えました。

さばける件数は毎秒24,272件です。300秒ごとなら306,435件で、12.6倍になります。

この記事の要点

  • 0.5秒だと固定が92.2%
  • さばけるのは24,272件
  • 300秒なら306,435件
  • 1秒しおりで1日892.8分

0.5秒ごとにまとめると、92.2%が固定の手間に消える

流れを表として扱い、区切って処理します。区切りを詰めるほど、1回ごとの手間が効きます。

Spark Streamingは、流れを表として扱います。公式はこの仕組みの中心にある考えは、生きた流れを、絶えず追記されていく表として扱うことであると述べています。

追記された分を区切って処理します。区切りの間隔でどう変わるのか実際に数えて比べました。

まとめる間隔を変える

text
毎秒 20,000件。1件 3.2マイクロ秒、1回のまとめに 380ミリ秒の固定の手間
まとめる間隔を変えて、処理にかかる時間と平均の遅れを見る

間隔        1回の件数      処理の時間      固定の手間の割合      平均の遅れ      1秒あたりさばける件数
    0.5秒         10,000件           412ms                 92.2%           0.66秒                   24,272件
      1秒         20,000件           444ms                 85.6%           0.94秒                   45,045件
      5秒        100,000件           700ms                 54.3%           3.20秒                  142,857件
     15秒        300,000件          1340ms                 28.4%           8.84秒                  223,881件
     60秒      1,200,000件          4220ms                  9.0%          34.22秒                  284,360件
    300秒      6,000,000件         19580ms                  1.9%         169.58秒                  306,435件

0.5秒ごとだと、412msのうち380msが固定の手間です。92.2%が中身の処理に使われていません。

その結果、さばけるのは毎秒24,272件です。入ってくる20,000件をかろうじて上回る程度でした。

遅れとの取り替え

300秒ごとなら306,435件です。12.6倍さばけますが、平均の遅れが169.58秒になります。

5秒あたりが折り合いでした。固定の手間は54.3%まで下がり、遅れは3.20秒に収まります。

この折り合いの決め方はバッチ処理の記事でも扱っていて、先に決めるのは許せる遅れのほうです。

間隔を詰めるほど、固定の手間が処理時間を占める。

単位: %0.5秒92.2%1秒85.6%5秒54.3%15秒28.4%60秒9%300秒1.9%毎秒20,000件・固定の手間380ミリ秒での実測。さばける件数は24,272件から306,435件まで変わる。
図1 ── まとめる間隔と、固定の手間が占める割合
出典Apache Spark 公式ドキュメント「Structured Streaming Programming Guide」2026-08-18 確認
The key idea in Structured Streaming is to treat a live data stream as a table that is being continuously appended.
原文Apache Spark 公式ドキュメント「Structured Streaming Programming Guide」 この内容の有効期限2027-02-18

1秒ごとにしおりを残すと、1日892.8分がしおりに消える

ちょうど1回を狙う作りです。そのために残すしおりは、細かすぎると本体を圧迫します。

Spark Streamingは、ちょうど1回の処理を狙って設計されています。公式は端から端までちょうど1回という意味づけを届けることが、この仕組みの設計の背景にある重要な目標のひとつだったと述べています。

そのためには、どこまで進んだかを残す必要があります。実際に数えて比べました。

しおりの間隔を変える

text
毎秒 20,000件。しおりを残すのに1回 620ミリ秒かかる
1日 2回落ちるとして、24時間ぶんを見る

しおりの間隔      1日のしおり回数      しおりに使う時間      やり直す件数(1回)      1日のやり直し件数
            1秒             86,400回                892.8分                   10,000件                 20,000件
           10秒              8,640回                 89.3分                  100,000件                200,000件
           60秒              1,440回                 14.9分                  600,000件              1,200,000件
          300秒                288回                  3.0分                3,000,000件              6,000,000件
         1800秒                 48回                  0.5分               18,000,000件             36,000,000件

1秒ごとに残すと、1日で892.8分がしおりに使われます。1日24時間のうち約15時間です。

そのかわり落ちたときのやり直しは10,000件で済みます。1800秒ごとなら18,000,000件です。

どこで釣り合うか

60秒ごとなら、しおりに使うのは14.9分です。1日の1%にとどまります。

やり直しは1日1,200,000件、時間にして60秒ぶんです。この範囲なら追いつけます。

ちょうど1回を保つには、書き出し先が同じ結果に落ち着く作りである必要もあります。作り方は冪等性の記事で扱いました。

出典Apache Spark 公式ドキュメント「Structured Streaming Programming Guide」2026-08-18 確認
Delivering end-to-end exactly-once semantics was one of key goals behind the design of Structured Streaming.
原文Apache Spark 公式ドキュメント「Structured Streaming Programming Guide」 この内容の有効期限2027-02-18

全部を書き直す形は、動いた分だけ書く形の62.5倍

表を丸ごと持つわけではありません。それでも書き出し方によっては、毎回全部を書きます。

Spark Streamingは、表を丸ごと作るわけではありません。公式はこの仕組みは、表の全体を実体として作るわけではないことに注意することと述べています。

内部で持たなくても、書き出し方によっては全部を書きます。実際に数えて比べました。

書き出し方を変える

text
集計の鍵は最大 50,000種。1回のまとめで 800種が新しく動く
1行 96バイトとして、書き出し方ごとの量を見る

経過したまとめ  そのとき動いた鍵  動いた分だけ書く  全部を書き直す      比
           1回目              800種            0.07MB          0.07MB      1.0倍
          10回目            8,000種            0.07MB          0.73MB     10.0倍
          60回目           48,000種            0.07MB          4.39MB     60.0倍
         360回目           50,000種            0.07MB          4.58MB     62.5倍

1回目はどちらも0.07MBです。始めたばかりのうちは差が出ません

60回目には60.0倍になります。動いた鍵が積み上がるほど、全部を書き直す形が重くなります

試験では見えない

この差は、動かし続けた時間に比例して開きます。短い試験では1.0倍のまま気づけません。

360回目で62.5倍、そこから先は鍵が増えないので止まります。頭打ちになるのは、鍵の種類を使い切ったときです。

余談 この計測での注意

3つの計測はいずれも手元で書いた模型で、実際のSparkを動かしたものではありません。1件3.2マイクロ秒、固定の手間380ミリ秒、しおり620ミリ秒といった値はすべて置いたものです。やり直す件数は落ちる時点が一様に散らばると置いた上での計算です。書き出し方の比較も、1回に動く鍵の数を一定と置いています。ここで見せているのは、間隔を詰めると固定の手間が処理時間を占めるという点と、書き出し方の差は動かし続けるほど開くという点の2つです。

出典Apache Spark 公式ドキュメント「Structured Streaming Programming Guide」2026-08-18 確認
Note that Structured Streaming does not materialize the entire table.
原文Apache Spark 公式ドキュメント「Structured Streaming Programming Guide」 この内容の有効期限2027-02-18

よくある質問

Spark Streamingの考え方は何ですか
流れを、絶えず追記されていく表として扱います。それが中心の考えだと説明されています。
まとめる間隔は短いほうがよいですか
遅れは減りますが、さばける件数が落ちます。0.5秒では毎秒24,272件でした。
しおりは細かく残すべきですか
やり直しは減りますが、1秒ごとだと1日892.8分がしおり自体に使われました。
全部を書き直す形はどれだけ重いですか
動いた分だけ書く形の62.5倍でした。鍵が増えるほど差が開きます。

まとめ

  • 流れは追記される表
  • 間隔を詰めると固定費が効く
  • しおりは細かすぎても損
  • 書き出し方で量が桁違い

今日から始められること

  1. いまのまとめる間隔を確かめる
  2. 1回ごとの固定の手間を測る
  3. しおりの間隔とやり直し件数を出す
  4. 書き出し方が全部を書く形になっていないか見る

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

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

出品の仕組みを見る