Modèle d'adressage
Apicurio Registry organise les schemas selon une hiérarchie à trois niveaux : group, artifact et version. Cette page explique la hiérarchie à trois niveaux d'Apicurio et comment elle diffère de l'espace de noms plat de Confluent Schema Registry.
La hiérarchie
Registry
└── Group (e.g., "com.example.schemas")
├── Artifact: "UserEvent"
│ ├── Version 1 (schema v1)
│ └── Version 2 (schema v2, latest)
└── Artifact: "OrderEvent"
└── Version 1 (schema v1, latest)
Group
Un espace de noms logique pour un ensemble de schemas apparentés. Les groups sont similaires aux packages en Java ou aux modules en Python : ils évitent les collisions de noms et fournissent une structure organisationnelle.
Exemples :
com.example.schemas— tous les schemas d'une équipe ou d'un domainepayments— schemas liés au service de paiementsdefault— le groupe par défaut lorsqu'aucun n'est spécifié
Artifact
Un schema nommé au sein d'un groupe. Chaque artifact possède un artifact_id unique au sein de son groupe. Un artifact peut avoir plusieurs versions à mesure que le schema évolue.
Version
Une révision spécifique d'un artifact. Les versions sont numérotées séquentiellement (1, 2, 3, ...). L'alias latest pointe toujours vers la version la plus récente.
Pourquoi group_id est requis
Dans apicurio-serdes, le group_id est un paramètre obligatoire de l'ApicurioRegistryClient :
client = ApicurioRegistryClient(
url="http://registry:8080/apis/registry/v3",
group_id="com.example.schemas", # Required
)
Cela s'explique par le fait que l'API REST v3 d'Apicurio inclut le groupe dans chaque URL d'artifact :
GET /groups/{groupId}/artifacts/{artifactId}/versions/latest/content
Sans groupe, l'appel API ne peut pas être construit. Chaque recherche de schema doit savoir dans quel groupe chercher.
Comparaison avec Confluent Schema Registry
Confluent Schema Registry utilise un espace de noms plat sans notion de groupe :
| Concept | Confluent Schema Registry | Apicurio Registry |
|---|---|---|
| Espace de noms | Aucun (plat) | Group |
| Identifiant de schema | Subject (par ex., user-events-value) |
Group + Artifact (par ex., com.example.schemas / UserEvent) |
| Convention de nommage | <topic>-<key\|value> |
Libre au sein d'un groupe |
| Multi-tenancy | Registries séparés | Groups au sein d'un seul registry |
Migration des subjects Confluent vers Apicurio
Lors d'une migration de Confluent Schema Registry vers Apicurio, vous devez décider :
- Dans quel groupe placer vos schemas (par ex.,
com.example.schemas) - Quel artifact ID utiliser pour chaque schema
Exemples courants de correspondance :
| Subject Confluent | Group Apicurio | Artifact Apicurio |
|---|---|---|
user-events-value |
com.example.schemas |
UserEvent |
order-events-value |
com.example.schemas |
OrderEvent |
user-events-key |
com.example.schemas |
UserEventKey |
Dans Confluent, le nom du subject encode à la fois l'identité du schema et le lien avec le topic dans une seule chaîne. Dans Apicurio, ce sont des concepts séparés : l'artifact ID est l'identité du schema, et le lien avec le topic se fait au niveau applicatif.
Comment apicurio-serdes utilise la hiérarchie
Lorsque vous créez un serializer :
serializer = AvroSerializer(
registry_client=client, # client knows group_id
artifact_id="UserEvent", # artifact within that group
)
Le serializer résout le schema en appelant :
GET /groups/com.example.schemas/artifacts/UserEvent/versions/latest/content
La réponse inclut à la fois un globalId et un contentId dans les en-têtes HTTP. Le serializer utilise l'un de ces identifiants (configurable via use_id) dans l'en-tête du wire format.