What you would want to see before trusting it.

Three brokers in one region, a bucket, and a client that can retry. The rest of this page is the list of things that are still sharp edges.

Three brokers

Metadata commits through a majority, and a wal produce acknowledges after a majority of its shard has fsynced. One process can die and the remaining majority still commits. That is the same shape as the three-broker profile and the cluster test. A single broker has nothing to fail over to.

One region

Raft election waits 400–800 ms (wal, metadata). Brokers belong in one region, where a round trip is a small part of that window. Two regions means two clusters and a copy between them. MirrorMaker 2 is tested from Apache Kafka 4.4.0 into Camus, with checkpoints and heartbeats (compatibility). Camus as the source is not in that suite yet.

Losing a shard majority

A shard that has lost its majority stays offline. truncate-to-sealed resumes it at the sealed end and drops acknowledged batches that were not sealed. POST /admin/add-wal-voter moves the other voters onto that new shard. Both are in ADR 0008 and wal_majority.rs.

If every broker disk is gone and the bucket remains, camus admin restore-cluster loads the newest metadata snapshot and rebuilds sealed extents from object footers. The metadata leader writes that snapshot every 30 seconds or 10,000 entries. Group offsets can move back by one snapshot interval. Unsealed write-ahead log entries are gone. The bound is ADR 0008.

APIs and deliberate differences

The compatibility doc is the list. Delegation tokens, client quotas, partition reassignment, and share groups are unimplemented. Transactions hide and reveal batches with metadata ranges, and Camus does not write control-batch markers. acks=1 waits for the same barrier as acks=all. The clients page is the short version. Delivery is how to build on what is implemented.

What CI runs

On a pull request, the required job runs cargo fmt --all --check and cargo test --workspace --locked. It does not start MinIO. A separate job starts MinIO and runs the broker tests with CAMUS_MINIO=1. The ecosystem suite (Kafka CLI, Connect, Streams, MirrorMaker 2 from Kafka into Camus) is nightly, not that required job. Tests has the commands.

When not to use Camus

The honest fit is a log with several independent consumers and replay, without a full replica of that log on every broker disk. These are the workloads that want something else.

How those projects differ on storage and license is on the comparison page.