Skip to content

Commit b4ea408

Browse files
committed
Explain millicores unit and add bare-metal conversion note
Adds definition of mc (millicores; 1,000 mc = 1 core per second) to the sizing formula and a note for non-Kubernetes users to divide the result by 1,000 to get cores. Assisted-by: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Sam Barker <sam@quadrocket.co.uk>
1 parent dae74a5 commit b4ea408

1 file changed

Lines changed: 3 additions & 1 deletion

File tree

_posts/2026-05-28-benchmarking-the-proxy.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,14 +163,16 @@ Numbers without guidance aren't very useful, so here's how to translate these re
163163

164164
> **`CPU (mc) = k × (P + N × C)`**
165165
>
166-
> where *k* = sizing coefficient (mc/MB/s), *P* = produce throughput (MB/s), *N* = number of consumer groups, *C* = consume throughput per group (MB/s)
166+
> where *mc* = millicores (the Kubernetes CPU scheduling unit; 1,000 mc = 1 core per second), *k* = sizing coefficient (mc/MB/s), *P* = produce throughput (MB/s), *N* = number of consumer groups, *C* = consume throughput per group (MB/s)
167167
168168
On our hardware (AMD EPYC-Rome 2 GHz with AES-NI), we measured *k* = 25 mc/MB/s on a 10-topic workload with record encryption — a conservative estimate: more realistic deployments with 100+ topics show *k* = 4–8 mc/MB/s, roughly 3× lower. Simpler filters will be cheaper still. *k* is measured from real workloads, so measure your throughput and validate on your own hardware. The companion post (coming soon) has the full coefficient grid across topic counts and core allocations.
169169

170170
*1:1 (100k msg/s at 1 KB, 1 consumer group)*: k=25, P=100, N=1, C=100 → 25 × (100 + 1 × 100) = 5,000m (~5 cores)
171171

172172
*Fan-out (same rate, 3 consumer groups)*: k=25, P=100, N=3, C=100 → 25 × (100 + 3 × 100) = 10,000m (~10 cores)
173173

174+
Not running on Kubernetes? Divide the result by 1,000 to get the number of cores to allocate to the proxy process.
175+
174176
2. **Latency budget**: well below saturation, expect 2–3 ms additional average publish latency and up to ~15 ms additional p99. The overhead scales with how hard you're pushing — give yourself headroom and you'll barely notice it.
175177

176178
3. **Scaling**: set `requests` equal to `limits` in your pod spec — this makes the CPU budget deterministic, which makes the throughput ceiling predictable. To increase throughput, raise the CPU limit. For redundancy, add proxy pods.

0 commit comments

Comments
 (0)