创建主题后,您可以向其中添加新版本。此过程称为注册新架构版本。每个新版本都表示与相应主题关联的架构的演变。
一个主题可以有多个版本。主题中的版本遵循可配置的兼容性规则,以确保安全的架构演变。例如,某个主题可能要求所有更改都向后兼容。向后兼容的更改示例是添加可选字段。添加必需字段会被视为不向后兼容的更改;如果您的主题配置为向后兼容,则不允许进行此更改。不过,如果您的主题配置为向前兼容,则添加必需字段是可以接受的。
兼容性检查不具有追溯性。如果更改了主题或架构注册表的兼容性规则,则不会根据新规则重新验证主题中已存在的版本。如需详细了解兼容性,请参阅关于兼容性类型。
所需的角色和权限
如需获得为主题注册架构版本所需的权限,请让您的管理员为您授予项目或特定架构注册表和主题的 Managed Kafka Schema Registry Editor (roles/managedkafka.schemaRegistryEditor) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含为主题注册架构版本所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需为主题注册架构版本,您需要具备以下权限:
-
在父上下文或默认上下文中授予此权限:
managedkafka.versions.create
更高级别的 Managed Kafka Schema Registry Admin (roles/managedkafka.schemaRegistryAdmin) 角色也包含这些权限。
如需详细了解 Managed Service for Apache Kafka 可用的预定义角色,请参阅访问权限控制文档。
注册新的架构版本
如需注册新的架构版本,请执行以下步骤。
控制台
在 Google Cloud 控制台中,前往架构注册表页面。
点击要注册新架构版本的架构注册表的名称。
在此架构注册表中的主题下,点击主题的名称。
在主题详情页面中,点击 创建版本。
架构定义字段会显示最新版本的定义。 更新此字段中针对新版本的定义。请勿在架构字段名称中包含敏感信息,例如个人身份信息 (PII) 或安全数据。
如果您的架构使用或依赖于架构注册表中其他架构中定义的数据结构,请执行以下步骤:
- 点击 Add Schema reference。
- 在参考名称字段中,输入所引用架构的参考名称。
- 在主题列表中,选择包含所引用架构的主题。
- 在版本列表中,选择所引用架构的版本号。
- 点击确定。
针对每个引用的架构重复执行上述步骤。
可选:如需检查新架构是否与之前的版本兼容,请点击检查兼容性。
如果架构兼容,系统会显示对勾标记。 否则,系统会显示错误消息。在这种情况下,请修正错误,然后再次点击检查兼容性。
执行的兼容性检查取决于主题的兼容性类型。
点击创建。如果架构定义有效并顺利通过了主题的兼容性检查,则新版本会显示在所有版本下。
REST
必须使用 Authorization 标头中的访问令牌对请求进行身份验证。如需获取当前应用默认凭据的访问令牌,请运行以下命令:gcloud auth application-default print-access-token。
如需在默认上下文中为主题注册新的架构版本,请使用 projects.locations.schemaRegistries.subjects.versions.create 方法向特定 URI 发出 POST 请求:
POST https://managedkafka.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/schemaRegistries/REGISTRY_ID/subjects/SUBJECT_ID/versions
Authorization: Bearer $(gcloud auth application-default print-access-token)
Content-Type: application/json
或者,如果使用特定情境,请在版本集合 URI 中添加相应情境,并使用 projects.locations.schemaRegistries.contexts.subjects.versions.create 方法。
POST https://managedkafka.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/schemaRegistries/REGISTRY_ID/contexts/CONTEXT_ID/subjects/SUBJECT_ID/versions
Authorization: Bearer $(gcloud auth application-default print-access-token)
Content-Type: application/json
替换以下内容:
- PROJECT_ID(必需):您的 Google Cloud项目 ID。
- LOCATION(必需):架构注册表所在的 Google Cloud 区域。
- REGISTRY_ID(必需):目标架构注册表的 ID。
- CONTEXT_ID(可选):包含主题的上下文的 ID。如果您想明确指定默认上下文,请使用
.(单个英文句点);否则,请省略/contexts/CONTEXT_ID以隐式使用默认上下文。 - SUBJECT_ID(必需):要在其下创建新版本的主题的 ID。
请求正文:
在请求正文中添加一个 JSON 对象,用于指定架构详细信息:
{
"schema": "YOUR_SCHEMA_DEFINITION_STRING",
"schema_type": "AVRO" | "PROTOBUF" | "JSON", // Optional, defaults to AVRO
"references": [ // Optional
{
"name": "REFERENCE_NAME",
"subject": "REFERENCED_SUBJECT_ID",
"version": REFERENCED_VERSION_NUMBER
}
// ... more references
]
// "version": VERSION_NUMBER, // Optional: Usually omitted, let service assign next
// "id": SCHEMA_ID, // Optional: Usually omitted, let service assign or reuse
}
替换以下内容:
YOUR_SCHEMA_DEFINITION_STRING(必需):包含实际架构定义载荷的字符串。schemaType(可选,位于schema对象内):架构的类型。可以是AVRO或PROTOBUF。如果省略,则默认为AVRO。references(可选,位于schema对象内):一个对象数组,用于定义此架构引用的任何架构。REFERENCE_NAME:用于在此架构的定义中引用其他架构的名称。REFERENCED_SUBJECT_ID:所引用架构的完全限定主题名称。示例:projects/test-project/locations/us-central1/schemaRegistries/test-registry/subjects/test-referenced-subject。REFERENCED_VERSION_NUMBER:所引用主题的架构的特定版本号(整数)。
versionId、schemaId:可选字段,通常由服务处理。 注册架构版本时,服务会分配下一个可用的版本号。
如果请求成功,API 会返回 200 OK 状态代码以及包含架构 ID 的响应正文。
如需了解详情,请参阅 REST API 文档。