Skip to content

Kafka compatibility

Roxa implements the Kafka wire protocol over TCP (port 9092 by default): existing applications connect without a rewrite — only the broker address changes. Below is an honest matrix of what is supported and verified by end-to-end tests with real clients (kcat / librdkafka).

Supported and verified e2e

CapabilityDetails
ApiVersions, Metadataversion negotiation, broker/topic discovery
ProduceRecordBatch v2, CRC32C, monotonic offsets — ordering within a partition is guaranteed
Fetchreading from an arbitrary offset
ListOffsetsearliest / latest
Consumer groupsFindCoordinator, Join/Sync, Heartbeat, Leave, OffsetCommit/OffsetFetch, rebalancing
Idempotent producersInitProducerId, PID + sequence, deduplication within a session
Compressiongzip, snappy, lz4, zstd
SASL/PLAINSaslHandshake + SaslAuthenticate; requests are rejected until authentication
Key-based routingmurmur2 — parity with Kafka's partition distribution

Guarantees

  • At-least-once: the producer is acknowledged only after the batch is durably written to storage (S3/MinIO or the file system). There is no gap between “accepted” and “saved” — by construction.
  • Idempotence applies within a producer session (the PID does not survive a broker restart).

Not supported yet

An honest list of what is missing (if any of this blocks your scenario — write to us, it shapes our priorities):

  • Transactions / exactly-once semantics.
  • Log compaction (retention is by size and time).
  • Kafka Connect, Schema Registry.
  • ACLs at the Kafka protocol level (authentication is SASL/PLAIN; the admin/viewer roles live on gRPC).

Verified with clients

The end-to-end tests run against real kcat/librdkafka — that is, every client built on librdkafka (Python confluent-kafka, Go confluent-kafka-go, C#, PHP and others). The Java client uses the same protocol specification but is not yet exercised separately in e2e — if it runs in your production, start with a test on the demo environment or let us know.

Connection examples — on the next page.