Crabka

A Rust reimplementation of Apache Kafka. Byte-for-byte wire compatible and KRaft-native — matching its throughput on ~40× less memory, and no JVM to babysit.

Apache 2.0 · v0.3.0 · GitHub

Kafka-class throughput

Matches Apache Kafka 4.3's produce-and-consume throughput within a few percent on identical hardware — ahead on the 1 KiB workloads — at 1.15–1.2× the messages per CPU-core and tighter tail latency.

~40× less memory

Broker resident in 24–32 MiB versus Kafka's ~1 GiB JVM heap. No GC pauses, no heap to tune.

Ready in 1–2 seconds

Cold start to first ack in 1–2 s, versus 8–9 s for a Kafka broker on the same box.

Byte-for-byte compatible

Speaks the Kafka wire protocol exactly. Your 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.

Crabka versus Apache Kafka
Capability Apache Kafka 4.3 Crabka
Runtime JVM (OpenJDK 21) + garbage collector Native binary — no JVM, no GC
Broker memory ~1 GiB heap 24–32 MiB RSS
Cold start to ready 8–9 s 1–2 s
Produce/consume throughput baseline ≈ parity (0.9–1.0×)
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) Built in
License Apache 2.0 Apache 2.0

* Producer write path, single-box like-for-like. 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, no ZooKeeper, no separate controller process. One binary to ship, run, and operate.

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, and admin clients, a Kubernetes operator, and an 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.