データ基盤

イベントストリーミングとは|分割を32個に増やしても、偏りがあると最大が平均の5.09倍だった

イベントストリーミングの分割は何を決めるのか分割を増やせば負荷は均せるのか順序はどこまで守られるのか

分割を32個に増やしました。キーに偏りがなければ、最も多い分割は平均の1.28倍です。

偏りがあると5.09倍でした。分割を増やしても、1つのキーは分けられません。

この記事の要点

  • 偏りなし32個で1.28倍
  • 偏りありだと5.09倍
  • 分割1個なら順序は100.0%
  • 16個に分けると6.4%

キーが散っていれば、分割は素直に効く

分割は処理を並べるための仕組みです。キーが散っていれば、件数はほぼ均等に分かれます。

イベントストリーミングでは、出来事を複数の分割に振り分けて並べて処理します。実際に数えました。

出典もこの狙いをデータをこのように分散して置くことは、多くの仲介役に対して同時に読み書きできるようになるため、規模を伸ばすうえで重要であるとしています。

出来事20万件・キー2000種を用意しました。キーを混ぜてから分割へ割り当てる形です。

偏りと分割数を動かす

text
偏り        分割数  最も多い分割  平均      最大が平均の何倍か
なし          4個            53399件    50000件               1.07倍
なし          8個            28542件    25000件               1.14倍
なし          16個           14587件    12500件               1.17倍
なし          32個            8015件     6250件               1.28倍

1/i^0.5     4個            51610件    50000件               1.03倍
1/i^0.5     8個            27665件    25000件               1.11倍
1/i^0.5     16個           15466件    12500件               1.24倍
1/i^0.5     32個            9079件     6250件               1.45倍

偏りがない場合、32個に分けても最大は平均の1.28倍です。ほぼ均等に分かれます。

分割数を増やすほど、1つあたりの件数は減ります。4個の53399件から、32個の8015件までです。

弱い偏りなら耐える

少し偏りを入れた場合も、16個までは1.24倍に収まります。32個で1.45倍です。

分割を増やすほど倍率が上がっていることに注意してください。1つあたりが小さくなるほど、偏りの影響が目立ちます

キーが散っていれば、分割数を増やしても偏りは小さい。

4個8個16個32個偏りなし弱い偏り強い偏り1.2倍未満1.2〜1.5倍1.5〜2倍2〜3倍3倍以上出来事20万件・キー2000種での実測。強い偏りの32個では5.09倍だった。
図1 ── 偏りと分割数ごとの、最大が平均の何倍か
出典Apache Kafka「Introduction」2026-08-18 確認
This distributed placement of your data is very important for scalability because it allows client applications to both read and write the data from/to many brokers at the same time.
原文Apache Kafka「Introduction」 この内容の有効期限2027-02-18

分割を32個に増やしても、偏りがあると最大が平均の5.09倍だった

同じキーは同じ分割へ入ります。1つのキーに集中していると、分割を増やしても分けられません。

イベントストリーミングで詰まる原因の多くがキーの偏りです。強い偏りを入れて測りました。

text
偏り        分割数  最も多い分割  平均      最大が平均の何倍か
1/i^1       4個            64253件    50000件               1.29倍
1/i^1       8個            41939件    25000件               1.68倍
1/i^1       16個           35686件    12500件               2.85倍
1/i^1       32個           31811件     6250件               5.09倍

分割を4個から32個へ8倍にしました。平均は50000件から6250件へ、きれいに8分の1です。

ところが最も多い分割は64253件から31811件までしか減りません。半分にしかなっていません。

1つのキーは分けられない

出典も割り当ての規則を同じキーを持つ出来事は、同じ分割へ書き込まれると明記しています。

この規則があるので、1つのキーに集中した分は、どれだけ分割を増やしても1か所に残ります

分割を増やすほど平均だけが下がるので、倍率は上がり続けます。32個で5.09倍という数字はそれを表しています。

打てる手

  1. キーを見直す。もっと散る単位に変える
  2. キーに枝を足す。重いキーだけ末尾に番号を付ける
  3. 順序を諦める。散らせば順序は守られなくなる
  4. 重い分割を厚くする。処理する側の割り当てを変える

2番目は効きますが、そのキーの中の順序が崩れます。順序が要るかどうかで選び方が変わります。

平均は分割数で下がるが、最大は下がらない。

6425304個8個16個32個最も多い分割平均出来事20万件・キー2000種で、強い偏りを入れた場合の実測。
図2 ── 強い偏りのときの、最大と平均
出典Apache Kafka「Introduction」2026-08-18 確認
Events with the same key (denoted by their color in the figure) are written to the same partition.
原文Apache Kafka「Introduction」 この内容の有効期限2027-02-18

順序が守られるのは、分割の中だけ

分割をまたぐと順序は保証されません。守りたい範囲とキーを一致させる必要があります。

イベントストリーミングの順序は、分割の中でしか守られません。どこまで守られるのかを数えました。

出来事10万件について、前後に並んだ組が同じ分割に入っているかを数えます。同じ分割なら順序が保証されます。

分割数と順序

text
分割数  同じキーの並び  別のキーとの並び  順序が守られる組の割合
1個              99999組                0組                  100.0%
4個              24989組            75010組                   25.0%
16個              6352組            93647組                    6.4%

分割を1個にすれば100.0%です。全体が1本の並びになるので、順序は完全に守られます。

16個に分けると6.4%です。前後の組のうち、9割以上は順序が保証されません。

守りたい範囲を決める

この数字は「全体の順序」を見たものです。実務で必要なのは、たいてい全体ではありません

同じ顧客の申請が順に処理されればよい、といった形です。その単位をキーにすれば、必要な範囲では順序が守られます

つまりキーの決め方は、負荷の散り方と、順序の範囲の両方を決めます。片方だけで選べません。

書く側は1つに限らない

同じ分割へ、複数の書き手が同時に書くこともあります。出典も適切であれば、両方の書き手が同じ分割へ書き込めることに注意と書いています。

この場合、書き手どうしの順序は決まりません。並びは、分割に届いた順になります。変更を並びとして拾う側の話はCDCの記事で扱っています。

キーは、負荷の散り方と順序の範囲を同時に決める。

充足 2 / 4キーごとの件数を数えている強い偏りがあると、32個に分けても最大が平均の5.09倍になる順序が要る範囲を決めている16個に分けると、全体の順序は6.4%しか保証されない分割を増やせば均せると考えている同じキーは同じ分割へ入るため、集中した分は分けられない順序のために分割を1個にしている順序は100%守られるが、その1個が処理の上限になる出来事20万件・キー2000種での実測にもとづく。
図3 ── 決める前の点検項目
余談 この計測での注意

キーの偏りは式で作った分布です。実際の偏りは業務によって違い、特定の1社や1店舗に集中することがあります。順序の割合も「前後に並んだ組」で数えた単純な形で、実務で必要な順序の範囲とは別です。ここで見せているのは、同じキーが同じ分割へ入るという規則から、偏りが分割数では解けないという関係です。

出典Apache Kafka「Introduction」2026-08-18 確認
Note that both producers can write to the same partition if appropriate.
原文Apache Kafka「Introduction」 この内容の有効期限2027-02-18

よくある質問

分割を増やせば負荷は均せますか
キーが散っていれば均せます。この計測では偏りがあると、32個に増やしても最大が平均の5.09倍でした。
なぜ増やしても効かないのですか
同じキーは必ず同じ分割へ入るためです。1つのキーに集中していると、その分割だけが重くなります。
順序はどこまで守られますか
同じ分割の中だけです。この計測では16個に分けると、前後の組のうち6.4%しか順序が保証されませんでした。
分割を1個にすればよいのでは
順序は100%守られますが、その1個が処理の上限になります。並べて処理する余地がなくなります。

まとめ

  • 出来事を並びとして流す仕組み
  • 同じキーは同じ分割へ入る
  • 偏りがあると増やしても均せない
  • 順序は分割の中だけ

今日から始められること

  1. キーごとの件数を数える
  2. 上位のキーが全体の何割かを出す
  3. その偏りで分割ごとの件数を計算する
  4. 順序が要る範囲がキーと一致するか確かめる

実務で組んだイベントストリーミングのワークフローには、値段が付きます

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

出品の仕組みを見る