1. Build Applications
  2. Kafka Clients
  3. Compatibility

Kafka Protocol and Features

Supported Kafka Requests

The current implementation of the Apache Kafka protocol in StreamNative Cloud supports all the functionalities in Classic Engine and limited functionalities in the Ursa Engine. Specifically, the following Apache Kafka requests are currently supported:

API KeyMessageClassic EngineUrsa Engine
0ProduceYY
1FetchYY
2ListOffsetsYY
3MetadataYY
8OffsetCommitYY
9OffsetFetchYY
10FindCoordinatorYY
11JoinGroupYY
12HeartbeatYY
13LeaveGroupYY
14SyncGroupYY
15DescribeGroupsYY
16ListGroupsYY
18ApiVersionsYY
19CreateTopicsYY
20DeleteTopicsYY
21DeleteRecordsYY
22InitProducerIdYY (*)
24AddPartitionsToTxnYN
25AddOffsetsToTxnYN
26EndTxnYN
28TxnOffsetCommitYY
32AlterConfigsYY
32DescribeConfigsYY
37CreatePartitionsYY
44IncrementalAlterConfigsYY
47OffsetDeleteYY
51DeleteGroupsYY
60DescribeClusterYY
61DescribeProducersYN
65DescribeTransactionsYN
66ListTransactionsYN

Notes

  • InitProducerId in Ursa Engine is partially supported when the transactional.id is NOT specified.

We're actively working on adding support for more Kafka features and more Kafka requests to both Classic Engine and Ursa Engine. Please contact us for specific feature requests or if you notice any discrepancies.

Unsupported Kafka Requests

Because the Kafka protocol implementation in StreamNative Cloud is based on Pulsar for Classic Engine and Ursa for Ursa Engine, the following Kafka requests are irrelevant and not supports. For example, requests like:

These requests are irrelevant to StreamNative Cloud since data storage and replication are handled differently - either in BookKeeper or in the underlying object storage. Therefore, these requests are unlikely to be supported.

API KeyRequest Name
4LeaderAndIsr
5StopReplica
6UpdateMetadata
7ControlledShutdown
23OffsetForLeaderEpoch
34AlterReplicaLogDirs
35DescribeLogDirs
43ElectLeaders
45AlterPartitionReassignments
46ListPartitionReassignments
55DescribeQuorum
56AlterPartition
57UpdateFeatures
58Envelope
64UnregisterBroker
67AllocateProducerIds
80AddRaftVoter
81RemoveRaftVoter

These security and ACL-related requests are not supported because StreamNative Cloud provides more comprehensive security mechanisms, including OAuth2 and Role-Based Access Control (RBAC). For information about using Kafka ACLs in StreamNative Cloud, see Manage Kafka ACLs to learn how to map Kafka ACLs to Pulsar ACLs.

API KeyRequest Name
29DescribeAcls
30CreateAcls
31DeleteAcls
38CreateDelegationToken
39RenewDelegationToken
40ExpireDelegationToken
41DescribeDelegationToken
50DescribeUserScramCredentials
51AlterUserScramCredentials

Kafka's quota feature is not supported. Please use Pulsar's quota management instead.

API KeyRequest Name
48DescribeClientQuotas
49AlterClientQuotas

API from latest KIPs

The API requests introduced from the latest KIPs are not yet supported. We are actively evaluating the feasibility of supporting them. If you have any specific feature requests, please contact us.

Supported topic configs

StreamNative Cloud supports the following topic configurations:

  • cleanup.policy: This configuration can be set to either compact or compact,delete. The policy controls topic compaction and is only effective when compact is included in the setting. Due to StreamNative Cloud's storage architecture, which preserves both raw and compacted segments rather than replacing individual log segments with compacted ones, we currently only support the values compact and compact,delete.

Supported Schema Registry APIs

StreamNative's Kafka Schema Registry is compatible with Confluent Schema Registry.

Following are the supported APIs:

Schemas

GET /schemas/ids/{int: id}
GET /schemas/ids/{int: id}/subjects
GET /schemas/ids/{int: id}/schema
GET /schemas/ids/{int: id}/versions
GET /schemas/types

Subjects

GET /subjects
GET /subjects/(string: subject)/versions
GET /subjects/(string: subject)/versions/(versionId: version)
GET /subjects/(string: subject)/versions/(versionId: version)/schema
GET /subjects/(string: subject)/versions/(string: versionId)/referencedby
POST /subjects/(string: subject)
POST /subjects/(string: subject)/versions?normalize=(boolean: normalize)
DELETE /subjects/(string: subject)?permanent=(boolean: permanent)
DELETE /subjects/(string: subject)/versions/(string: versionId)

Mode

GET /mode

Compatibility

GET /compatibility/subjects/${subject}/versions/latest

Config

GET /config
GET /config/${subject}
PUT /config/${subject}
Previous
Overview