Совместимость с Kafka
Roxa реализует Kafka wire protocol по TCP (порт 9092 по умолчанию): существующие приложения подключаются без переписывания — меняется только адрес брокера. Ниже — честная матрица того, что поддержано и проверено сквозными тестами с реальными клиентами (kcat / librdkafka).
Поддержано и проверено e2e
| Возможность | Детали |
|---|---|
| ApiVersions, Metadata | согласование версий, discovery брокера/топиков |
| Produce | RecordBatch v2, CRC32C, монотонные offsets — порядок в партиции гарантирован |
| Fetch | чтение с произвольного offset |
| ListOffsets | earliest / latest |
| Консюмер-группы | FindCoordinator, Join/Sync, Heartbeat, Leave, OffsetCommit/OffsetFetch, ребаланс |
| Идемпотентные продюсеры | InitProducerId, PID + sequence, дедупликация в рамках сессии |
| Компрессия | gzip, snappy, lz4, zstd |
| SASL/PLAIN | SaslHandshake + 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 пока не гоняется — если он у вас в проде, начните с теста на демо-стенде или сообщите нам.
Примеры подключения — на следующей странице.