Skip to content

Overview

RobustMQ Kafka is a Kafka protocol compatibility layer built on top of the unified RobustMQ kernel. It is not a standalone Kafka distribution, but a protocol implementation that lets the standard Kafka ecosystem connect directly to RobustMQ. Native Kafka clients (Java kafka-clients, librdkafka) and the official command-line tools (kafka-*.sh) connect directly, on the default port 9092.

Design principle: one data, multiple protocol views

The core design principle of RobustMQ Kafka is "one data, multiple protocol views": Kafka and MQTT share the same topic storage and metadata. The storage layer therefore keeps protocol-neutral, decoded message records rather than Kafka's private compressed batch format. This principle drives many implementation choices (for example, why Kafka's "store batches as-is + zero-copy" model is not used).

Key facts:

  • Controller / Coordinator = the meta-service Raft leader: no ZooKeeper or KRaft. The controller, group coordinator, and transaction coordinator in Kafka semantics all resolve to the current Raft leader, located via a gRPC lookup cached with a ~3s TTL.
  • Storage engine = File Segment: segment append / seal / scroll, offset → position index with mmap reads, ISR multi-replica with leader_epoch fencing.
  • Decode on write: Produce unpacks the RecordBatch into the store on write, and Fetch reframes records back into a RecordBatch, so the same topic can be read and written by other protocols too.

See System Architecture for details.

Capability summary

CapabilityStatusNotes
Produce / Consume / OffsetsProduce / Fetch / ListOffsets / OffsetCommit / OffsetFetch
Idempotent ProducerProducer ID allocation + sequence dedup (last-5 sliding window + epoch fencing)
Classic consumer groupsFindCoordinator / JoinGroup / SyncGroup / Heartbeat / LeaveGroup
KIP-848 consumer groupsConsumerGroupHeartbeat (server-side assignment); no subscribed_topic_regex
Topic managementCreate / delete / add partitions; auto-create on by default
Configuration managementDescribeConfigs / AlterConfigs / IncrementalAlterConfigs
SASL / SCRAM authenticationSCRAM-SHA-256 / SCRAM-SHA-512
ACL / quotas🟡Manageable, but not enforced for authorization or throttling
Delegation tokensMetadata management (tokens do not participate in auth)
Metadata / DescribeClusterCluster topology, brokers, topic / partition info
Fetch compression🟡Consumer side always returns uncompressed records
TransactionsNot advertised, not supported (reasons below)
Share Group (KIP-932)Not supported

For per-API versions and differences see the Protocol Compatibility Matrix; for the full "supported / partial / unsupported" list with reasons see Compatibility & Limitations.

Quick start

After starting a single node, use the official CLI to create a topic, produce, and consume:

bash
# Create a topic
kafka-topics.sh --bootstrap-server localhost:9092 \
  --create --topic quickstart --partitions 3

# Produce (type a few lines, then Ctrl-C)
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic quickstart

# Consume from the beginning
kafka-console-consumer.sh --bootstrap-server localhost:9092 \
  --topic quickstart --from-beginning

Full steps (including a Java kafka-clients example and SASL connection) are in Quick Start.

Documentation map

DocumentContents
System ArchitectureFive-layer architecture, request flow, key differences from native Kafka
Core ConceptsTopic / Partition / Offset, Record, consumer groups, Coordinator, Segment
Protocol Compatibility MatrixPer-API supported versions, status, and differences
Quick StartSingle-node startup, CLI and minimal Java client examples
CLI GuideComplete guide to the official kafka CLI against RobustMQ
Compatibility & LimitationsSupported / partial / unsupported list and root causes
🎉 既然都登录了 GitHub,不如顺手给我们点个 Star 吧!⭐ 你的支持是我们最大的动力 🚀