データ基盤

Apache Kafkaとは|分割を32個に増やしても、偏りが強いと最大は平均の5.09倍だった

何を並べて残すのか分割を増やすと均されるのか順序はどこまで守られるのか

出来事20万件を32個の分割へ割り当てました。偏りがなければ最大は平均の1.28倍です。

偏りが強いと5.09倍になります。分割を増やすほど、この比は広がりました。

この記事の要点

  • 偏りなしで1.28倍
  • 偏りが強いと5.09倍
  • 分割1個なら順序は100.0%
  • 16個では6.4%

分割を32個に増やしても、偏りが強いと最大は平均の5.09倍

同じキーは同じ分割へ入ります。だから、キーの偏りは分割を増やしても消えません。

Apache Kafkaでは、書く側と読む側が分かれています。公式は生産者とは、Kafkaへ出来事を公開する(書き込む)依頼側のアプリケーションであり、消費者とは、それらの出来事を購読する(読んで処理する)ものであると定めています。

書き込まれる先は分割です。同じキーの出来事は同じ分割へ入るので、その前提で偏りを数えました。

偏りと分割数を変える

text
出来事 200000件。キーは2000種。キーの偏りを変えて、分割ごとの件数を見る
分割はキーを混ぜてから割り当てる。同じキーは必ず同じ分割へ入る

偏り        分割数  最も多い分割  平均      最大が平均の何倍か
なし          4個            53399件    50000件               1.07倍
なし          32個            8015件     6250件               1.28倍

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倍

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

偏りが強い場合は5.09倍です。しかも分割を増やすほど、この比が広がっています。

比が広がる理由

最も多い分割の件数を見てください。4個のとき64253件、32個でも31811件です。半分にしかなりません。

平均のほうは5万件から6250件へ、8分の1になります。分母だけが下がるので、比が広がります。

止まっている理由は単純で、いちばん多いキーが1つの分割に入ったままだからです。分けても、そのキーは分かれません。

偏りがあると、分割を増やすほど比が広がる。

最大が平均の何倍か(倍)分割数(個)→5.635.2偏りなし・4個偏りなし・32個偏り強・4個偏り強・16個偏り強・32個出来事20万件・キー2000種での実測。偏りがなければ分割を増やしても比はほぼ変わらない。
図1 ── 分割数と、最大が平均の何倍か
出典Apache Kafka 公式ドキュメント「Introduction」2026-08-18 確認
Producers are those client applications that publish (write) events to Kafka, and consumers are those that subscribe to (read and process) these events.
原文Apache Kafka 公式ドキュメント「Introduction」 この内容の有効期限2027-02-18

分割16個では、順序が守られる組は6.4%だった

順序が守られるのは同じ分割の中だけです。分けるほど、守られる範囲が狭くなります。

Apache Kafkaは、出来事を流す基盤です。公式はApache Kafkaは出来事を流す基盤であると定めています。

流す以上、順序が問題になります。どこまで守られるかを数えました。

分割数と順序

text
出来事 100000件。同じ分割の中では順序が守られ、分割をまたぐと守られない

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

分割1個なら100.0%です。ただし、その1個が処理の上限になります。

16個に分けると6.4%まで下がります。ほとんどの組で順序が保証されません。

キーの選び方が範囲を決める

守られるのは同じキーの出来事どうしです。だからキーの選び方が、順序の範囲を決めます。

  1. 注文番号をキーにする。同じ注文の中では順序が守られる
  2. 顧客番号をキーにする。同じ顧客の中で守られる。範囲は広がる
  3. 固定値をキーにする。全体で守られる。分割1個と同じになる
  4. キーを付けない。順序は守られない

2番目にすると順序の範囲は広がりますが、前の節の偏りが強くなります。大口の顧客が1つの分割に集まります。

つまり順序の範囲と、偏りの少なさは逆を向きます。どちらを取るかを決めることになります。

分割そのものの偏りは、鍵から置き場所が決まる仕組みでも同じです。その計測はDynamoDBの記事にあります。

出典Apache Kafka 公式ドキュメント「Introduction」2026-08-18 確認
Apache Kafka® is an event streaming platform.
原文Apache Kafka 公式ドキュメント「Introduction」 この内容の有効期限2027-02-18

読んだら消えるのではなく、期間で消える

受け取っても残ります。だから複数の受け手が同じ出来事を、それぞれの進み方で読めます。

Apache Kafkaでは、読み取りが出来事を消しません。公式は代わりに、Kafkaがあなたの出来事をどれだけの期間保つかを、話題ごとの設定で定める。その期間を過ぎると、古い出来事は捨てられると述べています。

この性質が、受け手を増やせることにつながります。1人が読んでも減りません。

残ることの使い道

  1. 受け手を後から足せる。過去の分から読み直せる
  2. 失敗しても戻せる。どこまで読んだかを戻すだけ
  3. 複数の用途で同じ出来事を使える。互いに影響しない
  4. 期間を過ぎると読めない。読み直せる範囲に限りがある

4番目が制約になります。期間を7日にしていれば、8日前の出来事は戻れません

だから期間は、作り直したい範囲から決めます。3年ぶんを作り直したいなら、3年ぶん残すか、別に保管することになります。

残す量の見積もり

期間を延ばせば、置く量がそのまま増えます。1日8MBなら、3年で8760MBです。

その量を絞り込みながら読む話はAmazon Athenaの記事で扱いました。期間で区切ってあれば、必要な範囲だけを読めます。

余談 この計測での注意

キーの偏りは式で作ったもので、実在の分布ではありません。「1/i^1」は、i番目に多いキーの出現がiに反比例する形として置いた偏りです。順序の計測も、同じ分割の中では必ず守られ、またぐと守られないという単純な形にしました。実際には受け取る側の並列度でも変わります。ここで見せているのは、分割を増やしても1つのキーは分けられないこと、順序の範囲と偏りの少なさが逆を向くことの2つです。

出典Apache Kafka 公式ドキュメント「Introduction」2026-08-18 確認
Instead, you define for how long Kafka should retain your events through a per-topic configuration setting, after which old events will be discarded.
原文Apache Kafka 公式ドキュメント「Introduction」 この内容の有効期限2027-02-18

よくある質問

Kafkaは何を並べて残しますか
出来事です。話題は分割され、複数の仲介役にまたがって置かれると説明されています。
分割を増やせば均されますか
偏り次第です。偏りがなければ32個で1.28倍ですが、強い偏りでは5.09倍になりました。
順序はどこまで守られますか
同じ分割の中だけです。分割16個では、順序が守られる組は6.4%でした。
いつまで残りますか
話題ごとに指定します。指定した期間を過ぎると、古い出来事は捨てられます。

まとめ

  • 出来事を並べて残す
  • 話題は分割して置かれる
  • 順序は分割の中だけ
  • 残す期間は指定する

今日から始められること

  1. キーごとの件数の偏りを調べる
  2. いまの分割数と最大の分割を比べる
  3. 順序が必要な範囲を洗い出す
  4. 残す期間を確かめる

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

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

出品の仕組みを見る