创建主题后,您可以向其添加新版本。此过程称为注册新架构版本。每个新版本都代表与该主题关联的架构的演变。
一个主题可以有多个版本。主题中的版本遵循可配置的兼容性规则,以确保架构安全演变。例如,主题可以要求所有更改都向后兼容。向后兼容的更改的一个示例是添加可选字段。添加必填字段将被视为不向后兼容的更改;如果您的主题配置为向后兼容,则不允许进行此更改。但是,如果您的主题配置为向前兼容,则添加必填字段是可以接受的。
兼容性检查不具有追溯性。如果更改了主题或架构注册表的兼容性规则,则不会根据新规则重新验证主题中已存在的版本。如需详细了解 兼容性,请参阅 关于兼容性类型。
所需角色和权限
如需获得为主题注册架构版本所需的权限,请让您的管理员为您授予Managed Kafka Schema Registry Editor (roles/managedkafka.schemaRegistryEditor) IAM 角色,该角色适用于您的项目或特定的架构注册表和主题。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含 为主题注册架构版本所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需为主题注册架构版本,您需要以下权限:
-
在父级上下文或默认上下文中授予此权限:
managedkafka.versions.create
注册新架构版本
如需注册新架构版本,请执行以下步骤。
控制台
在 Google Cloud 控制台中,前往 架构注册表 页面。
点击您要在其中注册新架构版本的架构注册表的名称。
在此架构注册表中的主题 下,点击主题的名称。
在主题详情 页面中,点击 创建版本。
架构定义 字段显示了最新版本的定义。在此字段中更新新版本的定义。请勿在架构字段名称中包含敏感信息,例如个人身份信息 (PII) 或安全数据。
如果您的架构使用或依赖于架构注册表中 其他 架构中定义的数据结构,请执行以下步骤:
- 点击添加架构引用 。
- 在引用名称 字段中,输入被引用架构的引用名称。
- 在主题 列表中,选择包含被引用架构的主题。
- 在版本 列表中,选择被引用架构的版本号。
- 点击确定 。
针对每个被引用架构重复这些步骤。
可选:如需检查新架构是否与之前的版本兼容,请点击检查兼容性 。
如果架构兼容,则会显示 对勾标记。 否则,系统会显示错误消息。在这种情况下,请修正错误,然后再次点击检查兼容性 。
执行的兼容性检查取决于主题的 兼容性类型。
点击创建 。如果架构定义有效并顺利通过主题的兼容性检查,则新版本会显示在所有版本 下。
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 文档。