Crabka

A native-Rust Kafka-compatible broker and toolkit. Crabka speaks the Kafka wire protocol byte-for-byte, runs KRaft without a JVM, and keeps the operator, clients, schema registry, gateway, and rebalancer in one workspace.

Apache 2.0 · v0.3.7 · GitHub

Kafka-class throughput

Matches or beats a like-for-like Strimzi cluster on key produce-and-consume workloads, including multi-producer fan-out, at 1.6–3.0× the messages per CPU-core.

≈ a tenth of the memory

A Crabka broker's working set sits in the low hundreds of MiB against Strimzi's 2.5–5.5 GiB. No GC pauses, no heap to tune.

Ready in 1–2 seconds

Cold start to first ack in 1–2 s — no JVM warmup, no GC ramp.

Byte-for-byte compatible

Speaks the Kafka wire protocol exactly. Existing clients and the JVM kafka-*.sh tools work unmodified.

Crabka vs. Apache Kafka

Same wire protocol. Same admin tools. A fraction of the footprint.

Capability Strimzi (Apache Kafka) Crabka
Runtime JVM (OpenJDK 21) + garbage collector Native binary — no JVM, no GC
Broker memory 2.5–5.5 GiB 114–622 MiB measured
Cold start to ready 8–9 s 1–2 s
Produce/consume throughput baseline matches–beats
Packaging JVM + shell scripts Single static binary
Memory safety Manual / JVM-managed Safe Rust — unsafe forbidden
Metadata quorum KRaft KRaft — native Rust, real KIP-595 wire
Wire protocol Apache Kafka 4.3 Apache Kafka 4.3 — byte-exact
Admin tooling kafka-*.sh kafka-*.sh, unmodified
Operator & rebalancer Strimzi + Cruise Control (separate) Crabka operator + rebalancer
License Apache 2.0 Apache 2.0

* Three-broker Kubernetes cluster, identical pod resources. See the full benchmark methodology →

Built different, on purpose

Kafka semantics, re-engineered in safe Rust.

Drop-in protocol compatibility

Every encode/decode is checked against kafka-clients 4.3.0 with differential byte-equality tests, and a JVM acceptance suite drives the official cp-kafka admin tools against a live broker.

Memory-safe & concurrent

Async Rust on tokio. No JVM, no GC pauses, and unsafe_code = "forbid" across the entire workspace.

Single static binary

No JDK and no ZooKeeper. Run a broker/controller process as a native binary, or let the Kubernetes operator manage it.

KRaft-native

Metadata lives in a native KRaft quorum from day one — speaking the real KIP-595 wire (interoperable with JVM controllers), with snapshots, dynamic reconfiguration, and split controller/broker roles included.

Modern crypto

TLS via rustls; SASL/SCRAM-256/512, PLAIN, OAUTHBEARER (JWT/JWKS), and GSSAPI/Kerberos out of the box.

Batteries included

Native producer, consumer, admin, and streams clients, Schema Registry, a gateway, Kubernetes operator, and automated rebalancer — all in one workspace.

Drop-in Kafka, without the JVM.

Point your existing producers, consumers, and kafka-*.sh tooling at a Crabka broker and keep moving.