General
Is it compatible with Confluent Schema Registry?
For the supported operations, yes—standard Confluent serializers, deserializers, and REST clients work unchanged. Several Confluent features aren’t implemented, and a few endpoints behave differently. Read Confluent API compatibility before migrating.Which schema formats are supported?
Avro, JSON Schema, and Protobuf.GET /schemas/types returns exactly
["AVRO","JSON","PROTOBUF"].
What’s the minimum permission a client needs?
A producer that registers schemas needsschema-writer. A consumer that only
resolves them needs schema-reader.
Both are scoped per subject.
How do I find my Schema Registry endpoint?
On a Kafka cluster it’s the cluster’s HTTP service URL. On a Pulsar cluster it’s that URL with/kafka appended. See
Get the Schema Registry URL.
Can I use OAuth instead of an API key?
Yes, with the Kafka Java client and theoauth-client dependency. See
OAuth2.
Schemas and subjects
What’s the difference between a schema ID and a version?
A schema ID identifies a schema globally—register the same definition under two subjects and you get one ID. A version is the position of a schema within a subject. The same schema ID can be version 1 of one subject and version 3 of another. See Key concepts.How many schemas can I store?
There’s no maximum number of subjects, no maximum number of versions per subject, and no storage quota. The one hard limit is a 5 MB request body, which caps the size of a single schema.How do I find which subjects use a schema ID?
Can I recover a deleted schema?
No. A soft delete keeps the schema readable through?deleted=true, but nothing restores it, and
re-registering the same schema creates a new version. Hard-deleted data is gone. See
Delete schemas.
Why can’t I delete this schema?
Another schema references it—error code 42206. Find them withGET /subjects/{subject}/versions/{version}/referencedby and delete those first.
Can I change a subject’s format from Avro to JSON?
No. That’s rejected with HTTP 409 in every compatibility mode, includingNONE. Use a new subject.
Compatibility
What’s the default compatibility mode?
BACKWARD, for every format.
Why does GET /config say NONE?
The global GET /config returns a fixed {"compatibilityLevel":"NONE"} regardless of what’s in
force. It’s not reporting a real value. Read GET /config/{subject} instead. See
Behavior differences.
How do I change the global default compatibility mode?
You can’t—there’s noPUT /config. Set the mode on each subject with PUT /config/{subject}.
Should I upgrade producers or consumers first?
It depends on the mode. UnderBACKWARD (the default), consumers first. Under FORWARD,
producers first. Under FULL, either. See
Order of upgrading clients.
Can I test a schema change without registering it?
Yes, and you should—put it in CI:What is ALWAYS_INCOMPATIBLE?
A StreamNative extension with no Confluent equivalent. It rejects every schema change once a subject has at least one version—useful for freezing a subject. Confluent client libraries may not accept the value, in which case set it through the REST API.Migrating from Confluent
Do Data Contracts work?
No, and the failure is silent. A registration carryingmetadata or ruleSet succeeds—the
fields are discarded and the schema is stored without them, with no error. If you rely on schema
rules, CEL validation, or migration rules, they stop being enforced the moment you switch.
Is Schema Linking supported?
No./exporters/* returns 404. Use
Universal Linking to replicate schemas between
clusters instead.
Are schema contexts supported?
No.GET /contexts returns 404, and qualified subject names aren’t recognized.
Is client-side field level encryption supported?
No. There’s no DEK/KEK registry and noencrypt rule executor.
Why did my RecordNameStrategy subjects change meaning?
Subject names are parsed into Pulsar tenant, namespace, and topic components. ARecordNameStrategy subject like com.acme.MyRecord becomes tenant com, namespace acme, topic
MyRecord. Confirm those exist and that your credentials cover them. See
Subject names and Pulsar coordinates.
Does ?normalize=true work?
For Avro and Protobuf, yes. For JSON Schema it’s a no-op, so schemas differing only in property
ordering register as separate versions. On the /compatibility/* endpoints it’s ignored for every
format.
Does the Confluent Maven plugin work?
It talks to the registry over the standard REST API, so the goals that use supported endpoints should work. It isn’t tested against StreamNative Cloud, so verify against a non-production cluster before relying on it in a pipeline.Operations
Is the Schema Registry a separate service I connect to?
No. It’s served at your cluster’s own endpoint on port 443 over HTTPS, so it inherits the cluster’s network configuration—including private networking.Why is my subject list empty?
GET /subjects filters to subjects your credentials can read rather than returning a permission
error. An empty array means either the registry is empty or your role covers none of the existing
subjects.
How do I replicate schemas to another region?
Universal Linking replicates from an active cluster to one or more standby clusters. Standbys run in import mode: they accept replicated schemas and reject new registrations from producers. Replication is one-directional, and deletions aren’t replicated.Can I make the broker reject records without a schema?
Yes—enable schema ID validation per topic. Note it useskop.kafka.* properties rather than Confluent’s confluent.* ones, and tombstones always
pass.
Next steps
Confluent compatibility
The complete support and behavior reference.
Troubleshooting
Error codes and common symptoms.