データ基盤

Apache Pulsarとは|追記しかしない形でも、実際に書いた量は元の6.14倍だった

追記だけなら書き込みは軽いのか残す期間で読む量はどう変わるのか自前で持つか借りるか

40,000MBを追記しただけなのに、実際に書いた量は245,440MBでした。6.14倍です。

段のまとめ直しが起きるからです。設定を変えると4.30倍まで下がりました。

この記事の要点

  • 実際に書いた量は6.14倍
  • 広げると4.30倍
  • 日で区切れば8MBで済む
  • 使う割合20%ならずっと借りる

追記しかしない形でも、実際には6.14倍書いている

末尾に足すだけの形です。それでも段のまとめ直しがあるので、書き込みは増えます。

Apache Pulsarの記録は、末尾に足すだけの形です。公式は台帳とは、書き手が1つだけの追記のみのデータ構造であり、複数のBookKeeperの保管の節に割り当てられると述べています。

追記だけなら軽いのか。実際に書いた量を数えて比べました。

段の広がりを変える

text
書き込んだ量 40,000MB。手元にためて 64MB ごとに落とす
落とした先がいっぱいになったら、次の段へまとめ直す

広がり  実際に書いた量  元の何倍  まとめ直した段  収まった段の上限
4倍             245,440MB     6.14倍              3段            40,960MB
10倍            184,640MB     4.62倍              2段            64,000MB
20倍            171,840MB     4.30倍              2段           256,000MB

40,000MBを書いたのに、実際には245,440MBを書いています。6.14倍です。

広がりを20倍にすると4.30倍まで下がります。まとめ直す段が3段から2段に減るためです。

追記でも書き直しは起きる

書く先はいつも末尾です。それでも、段がいっぱいになると次の段へまとめ直します

そのとき移す分と、移す先で重なる分の両方を書きます。この繰り返しが倍率になります

同じ場所を書き換える方式とは向きが違います。比較はCassandraの記事で扱いました。

広がりを大きくすると、まとめ直しの段が減って倍率が下がる。

単位: 倍広がり4倍6.14倍広がり10倍4.62倍広がり20倍4.3倍書き込み40,000MBでの実測。まとめ直した段は順に3段・2段・2段。
図1 ── 段の広がりと、実際に書いた量の倍率
出典Apache Pulsar 公式ドキュメント「Architecture Overview」2026-08-18 確認
A ledger is an append-only data structure with a single writer that is assigned to multiple BookKeeper storage nodes, or bookies.
原文Apache Pulsar 公式ドキュメント「Architecture Overview」 この内容の有効期限2027-02-18

日で区切れば、1日ぶんの読み取りが8,760MBから8MBになる

記録は残り続けます。だからこそ、期間で絞れる区切り方にしておく必要があります。

Apache Pulsarは、記録を別の仕組みに預けます。公式はPulsarは、残るかたちでのメッセージの保管に、Apache BookKeeperと呼ばれる仕組みを使うと述べています。

残り続けるので、後から読むときの絞り方が効いてきます。実際に数えて比べました。

区切り方を変える

text
3年ぶん(1095日)・1日 8MB。合わせて 8,760MB
期間で絞る問い合わせに対し、区切り方を変えて読む量を見る

区切り方                1日ぶん        7日ぶん       30日ぶん      365日ぶん     1095日ぶん
区切らない                8,760MB     8,760MB     8,760MB     8,760MB     8,760MB
年で区切る                2,920MB     2,920MB     2,920MB     2,920MB     8,760MB
月で区切る                  243MB       243MB       243MB     2,920MB     8,760MB
日で区切る                    8MB        56MB       240MB     2,920MB     8,760MB

1日ぶんを読むとき、区切らなければ8,760MB、日で区切れば8MBです。1095倍の差でした。

月で区切ると243MBです。区切りの単位より細かくは絞れません

広く読む問い合わせでは差がない

右端の列を見ると、どの区切り方でも8,760MBです。3年ぶん全部を読むなら、区切っても意味がありません

だから区切りの単位は、いちばん狭い問い合わせに合わせて決めます。広い問い合わせのほうは、どうせ全部読むことになります。

細かく区切りすぎる側の弊害はParquetの記事で扱いました。

出典Apache Pulsar 公式ドキュメント「Architecture Overview」2026-08-18 確認
Pulsar uses a system called Apache BookKeeper for persistent message storage.
原文Apache Pulsar 公式ドキュメント「Architecture Overview」 この内容の有効期限2027-02-18

使う割合が20%なら、いつまでも借りるほうが安い

自分で組む形を選べます。ただし持ち続ける費用があるので、使う割合で結論が変わります。

Apache Pulsarは、自分でまとまりを組む形をとれます。公式はいちばん上の水準では、Pulsarの1つの実体は、1つ以上のPulsarのまとまりからなると述べています。

自分で持つと、使わない期間も維持費がかかります。どこで並ぶのか実際に数えて比べました。

使う割合と期間を変える

text
購入は一括 100、そのあと毎月 3.5。借りる場合は毎月 12(使った月だけ)
借りる側は使わない月に止められるものとした

使う割合          6か月       12か月       18か月       24か月       36か月       48か月
20%               借りる        借りる        借りる        借りる        借りる        借りる
50%               借りる        借りる        借りる        借りる        借りる         購入
80%               借りる        借りる         購入         購入         購入         購入
100%              借りる         購入         購入         購入         購入         購入

分かれ目の月数(購入の総額と、借りる総額が並ぶ点)

使う割合  分かれ目  そのときの総額
20%             並ばない               —
50%           40.0か月             240
80%           16.4か月             157
100%          11.8か月             141

常に使うなら11.8か月で並びます。それより長く使うなら、自分で持つほうが安くなります。

使う割合が20%だと並びません。毎月の維持費が、借り賃の期待値を上回るためです。

先に測るのは稼働率

50%でも分かれ目は40.0か月です。3年以上使い続ける見込みがなければ、借りるほうが安く済みます

つまり判断の入口は、期間ではありません。使わない時間がどれだけあるかです。

余談 この計測での注意

3つの計測はいずれも手元で書いた模型で、実際のApache Pulsarを動かしたものではありません。まとめ直すときに書く量を「移す分+移す先の重なる分」の2倍として計算しており、実装によって係数は変わります。1日8MBや購入100・毎月3.5といった値もすべて置いたものです。借りる側が使わない月に止められるという前提も、実際には難しいことがあります。ここで見せているのは、追記だけの形でも書き込みは数倍になるという点と、区切りの単位より細かくは絞れないという点の2つです。

出典Apache Pulsar 公式ドキュメント「Architecture Overview」2026-08-18 確認
At the highest level, a Pulsar instance is composed of one or more Pulsar clusters.
原文Apache Pulsar 公式ドキュメント「Architecture Overview」 この内容の有効期限2027-02-18

よくある質問

Apache Pulsarはどこに記録を置きますか
Apache BookKeeperという仕組みを使います。残るかたちでの保管に用いると説明されています。
追記だけなら書き込みは軽いですか
軽くありません。段のまとめ直しが起きるため、実際に書いた量は元の6.14倍でした。
残す期間で読む量は変わりますか
区切り方で変わります。1日ぶんを読むとき、区切らなければ8,760MB、日で区切れば8MBでした。
自前で持つのと借りるのはどちらが安いですか
使う割合しだいです。100%使うなら11.8か月で並び、20%なら並びませんでした。

まとめ

  • 記録は別の仕組みに置く
  • 追記でも書き直しは起きる
  • 区切り方が読む量を決める
  • 自前は使う割合で決まる

今日から始められること

  1. 書いた量と実際の書き込み量を比べる
  2. 段の設定を確かめる
  3. 残す期間と区切りの単位を見る
  4. 使わない時間の割合を測る

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

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

出品の仕組みを見る