Skip to content

Совместимость с Kafka

Roxa реализует Kafka wire protocol по TCP (порт 9092 по умолчанию): существующие приложения подключаются без переписывания — меняется только адрес брокера. Ниже — честная матрица того, что поддержано и проверено сквозными тестами с реальными клиентами (kcat / librdkafka).

Поддержано и проверено e2e

ВозможностьДетали
ApiVersions, Metadataсогласование версий, discovery брокера/топиков
ProduceRecordBatch v2, CRC32C, монотонные offsets — порядок в партиции гарантирован
Fetchчтение с произвольного offset
ListOffsetsearliest / latest
Консюмер-группыFindCoordinator, Join/Sync, Heartbeat, Leave, OffsetCommit/OffsetFetch, ребаланс
Идемпотентные продюсерыInitProducerId, PID + sequence, дедупликация в рамках сессии
Компрессияgzip, snappy, lz4, zstd
SASL/PLAINSaslHandshake + SaslAuthenticate; до аутентификации запросы отклоняются
Маршрутизация по ключуmurmur2 — паритет с распределением Kafka по партициям

Гарантии

  • At-least-once: подтверждение продюсеру приходит только после durable-записи пачки в хранилище (S3/MinIO или ФС). Между «принял» и «сохранил» потерь нет — по построению.
  • Идемпотентность действует в рамках сессии продюсера (PID не переживает рестарт брокера).

Пока не поддержано

Честный список того, чего нет (если что-то из этого блокирует ваш сценарий — напишите, это влияет на приоритеты):

  • Транзакции / exactly-once semantics.
  • Log compaction (retention — по размеру и времени).
  • Kafka Connect, Schema Registry.
  • ACL на уровне Kafka-протокола (аутентификация — SASL/PLAIN; роли admin/viewer — на gRPC).

Проверено клиентами

Сквозные тесты гоняются настоящим kcat/librdkafka — то есть всеми клиентами на базе librdkafka (Python confluent-kafka, Go confluent-kafka-go, C#, PHP и др.). Java-клиент использует ту же спецификацию протокола, но отдельно в e2e пока не гоняется — если он у вас в проде, начните с теста на демо-стенде или сообщите нам.

Примеры подключения — на следующей странице.