What a month of this log costs.
Planning numbers from ADR 0007, not a bill. R2 Standard prices are the ones recorded there on 2026-11-05. The same arithmetic is scripts/cost.py.
The formulas
One active upload stream writes one object per flush. A stream at 16 MiB/s or more still flushes every CAMUS_FLUSH_MS (250 ms) or at 8 MiB, whichever comes first. A quieter stream waits until the object reaches 8 MiB, and at most 30 seconds (CAMUS_QUIET_FLUSH_MS). Partitions that share a stream share that object. Several streams that all receive bytes add up.
Class A is $4.50 per million requests: those puts, plus one metadata snapshot put every 30 seconds, plus one put and one GET per 128 MiB when compaction rewrites a segment. Class B is $0.36 per million: one ranged GET per ingest object for each consumer that misses the cache, plus the compaction read. Tail reads served from the write-ahead log are not GETs. Storage is $0.015 per GB-month, and a GB is 1e9 bytes. DeleteObject is free. R2 egress is free. A month here is 30 days.
At 1 MiB/s a single stream is quiet: one put every 8 MiB, 0.125 puts/s. At 20 MiB/s the 250 ms timer still binds, 4 puts/s, and the ADR's $0.018432 per GiB is that timer applied to one MiB of ingest. At 100 MiB/s the 8 MiB cap binds: 12.5 puts/s, $0.000576 per GiB, rounded to $0.0006. One consumer reading every sealed object of a timer-bound stream is 4 GETs per MiB, $0.00147456 per GiB, rounded to $0.0015. The old per-partition timer, which Camus does not use, was 4,000 puts/s at 1 MiB/s across 1,000 partitions, $64.80 per hour. A quiet partition now waits for 8 MiB or 30 seconds, so those 1,000 partitions are one put each per 30 seconds.
The table starts from that rate and then applies four adjustments. MiB/s counts only while ingest is flowing, 8 hours a day unless you change it. The miss share defaults to 0, because a consumer that keeps up reads the write-ahead log. Dollars subtract the Standard free tier: 1 million Class A requests, 10 million Class B requests, and 10 GB-month. Class A also includes the orphan sweep, which lists bundle/ every 5 minutes at one request per 1,000 keys. Compaction is on by default, as it is in the broker, so the live set is about one key per 128 MiB instead of one key per flush. Cloudflare rounds each class up to the next million requests and storage up to the next GB. This table does not.
Issue #141 has not published object-store request counts, and Benchmarks/ records latency and throughput. python3 scripts/cost.py --check matches the unrounded products above. The ADR’s rounded figures sit within 2.5% of those products, except the old “$1.6 per hour”, which was not the product of the expression beside it. The ADR now says $64.80.
When the number gets large
- A shard above about 16 MiB/s. It still flushes every 250 ms, before the object reaches 8 MiB. A quieter shard waits for 8 MiB or 30 seconds.
- Many shards that each see a little traffic. Each shard has its own timer. Partition count alone does not do this. Partitions on one shard share one object.
- Heavy cold reads. Fan-out times the share of reads that miss the cache, once per ingest object. Compaction later makes a historical read one GET per 128 MiB. Leave the miss share at 0 when consumers keep up.
- A long retention with compaction off. The sweep lists every remaining key every 5 minutes, one Class A request per 1,000 keys.
Your workload
| Line | Amount | USD / month |
|---|
Bundled puts per second while ingest is flowing: 4. If each partition flushed alone: 4 puts per second. That second figure is not part of the total. List pages this month: 0.
Compute is brokers times the hourly price times 720 hours, whether or not ingest is flowing. wal disk is the footprint while ingest is flowing: replication factor times that rate times upload lag, capped at 8 GiB per broker. It is not scaled down by the idle hours. r2 keeps no log on disk. Each network row is one copy of the bytes produced during the flowing hours. Follower replication is that volume times replication factor minus one, and only in wal mode. Out to consumers is that volume times fan-out. The price fields start at a small cloud rate: $0.04 per broker-hour, $0.08 per GB-month of disk, and $0.01 per GiB of virtual-machine traffic. Replace them with your own rates.
Next to Confluent Cloud
Dated 2026-11-12. These rows are a fixed example, separate from the form. Three Hetzner CX33 brokers on the USD list: $0.016 an hour, capped at $9.99 a month, plus a $0.60 IPv4, so $32 for the three. Each includes 20 TB of outbound traffic, then $1.20 per TB. Traffic between the brokers is outside that quota. R2 is the price in ADR 0007. Confluent’s figures are the list card the same day, before a region multiplier, support, or connectors. Their GB is a GiB. Storage on Basic and Standard is about three copies. An eCKU is counted only during the hours ingest flows. A Standard cluster left on all month is $540 per eCKU before those bytes.
| Workload | Camus on these brokers | Confluent Cloud |
|---|---|---|
| 1 MiB/s, 8 hours a day, 7 days, 1 reader | $35 | Basic $132. Standard $286–$312 |
| 1 MiB/s, 24 hours a day, 7 days, 1 reader | $41 | Basic $395. Standard about $935 |
| 100 MiB/s, 8 hours a day, 7 days, 3 readers | $765 | Standard $17,300–$22,300 |