注册新的架构版本

创建主题后,您可以向其添加新版本。此过程称为注册新架构版本。每个新版本都代表与该主题关联的架构的演变。

一个主题可以有多个版本。主题中的版本遵循可配置的兼容性规则,以确保架构安全演变。例如,主题可以要求所有更改都向后兼容。向后兼容的更改的一个示例是添加可选字段。添加必填字段将被视为不向后兼容的更改;如果您的主题配置为向后兼容,则不允许进行此更改。但是,如果您的主题配置为向前兼容,则添加必填字段是可以接受的。

兼容性检查不具有追溯性。如果更改了主题或架构注册表的兼容性规则,则不会根据新规则重新验证主题中已存在的版本。如需详细了解 兼容性,请参阅 关于兼容性类型

所需角色和权限

如需获得为主题注册架构版本所需的权限,请让您的管理员为您授予Managed Kafka Schema Registry Editor (roles/managedkafka.schemaRegistryEditor) IAM 角色,该角色适用于您的项目或特定的架构注册表和主题。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含 为主题注册架构版本所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需为主题注册架构版本,您需要以下权限:

  • 在父级上下文或默认上下文中授予此权限: managedkafka.versions.create

您也可以使用自定义角色或其他预定义角色来获取这些权限。

注册新架构版本

如需注册新架构版本,请执行以下步骤。

控制台

  1. 在 Google Cloud 控制台中,前往 架构注册表 页面。

    前往架构注册表

  2. 点击您要在其中注册新架构版本的架构注册表的名称。

  3. 此架构注册表中的主题 下,点击主题的名称。

  4. 主题详情 页面中,点击 创建版本

  5. 架构定义 字段显示了最新版本的定义。在此字段中更新新版本的定义。请勿在架构字段名称中包含敏感信息,例如个人身份信息 (PII) 或安全数据。

  6. 如果您的架构使用或依赖于架构注册表中 其他 架构中定义的数据结构,请执行以下步骤:

    1. 点击添加架构引用
    2. 引用名称 字段中,输入被引用架构的引用名称。
    3. 主题 列表中,选择包含被引用架构的主题。
    4. 版本 列表中,选择被引用架构的版本号。
    5. 点击确定

    针对每个被引用架构重复这些步骤。

  7. 可选:如需检查新架构是否与之前的版本兼容,请点击检查兼容性

    如果架构兼容,则会显示 对勾标记。 否则,系统会显示错误消息。在这种情况下,请修正错误,然后再次点击检查兼容性

    执行的兼容性检查取决于主题的 兼容性类型

  8. 点击创建 。如果架构定义有效并顺利通过主题的兼容性检查,则新版本会显示在所有版本 下。

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 对象内):架构的类型。可以是 AVROPROTOBUF。如果省略,则默认为 AVRO

  • references (可选,位于 schema 对象内):一个对象数组,用于定义此架构引用的任何架构。

    • REFERENCE_NAME:用于在此架构的定义中引用其他架构的名称。

    • REFERENCED_SUBJECT_ID:被引用架构的完全限定主题名称。示例:projects/test-project/locations/us-central1/schemaRegistries/test-registry/subjects/test-referenced-subject

    • REFERENCED_VERSION_NUMBER:被引用主题的架构的特定版本号(整数)。

  • versionIdschemaId:通常由服务处理的可选字段。 注册架构版本时,服务会分配下一个可用的版本号。

如果请求成功,API 会返回 200 OK 状态代码和一个包含架构 ID 的响应正文。

如需了解详情,请参阅 REST API 文档

后续步骤

Apache Kafka® 是 Apache Software Foundation 或其关联公司在美国和/或其他国家/地区的注册商标。