删除正文

本文档介绍了如何从架构注册表中删除主题。您可以通过以下两种方式删除科目:

  • 软删除。将主题标记为已删除,但其信息会保留下来,并且可以恢复。相应主题的所有版本也会被软删除。

  • 永久删除。永久移除数据正文及其关联的数据。

您还可以从主题中删除特定架构版本。如需了解详情,请参阅删除架构主题版本

所需的角色和权限

如需获得删除主题所需的权限,请让您的管理员为您授予主题的 Managed Kafka Schema Registry Editor (roles/managedkafka.schemaRegistryEditor) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含删除主账号所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

您需要具备以下权限才能删除正文:

  • 针对要删除的正文授予以下权限: managedkafka.subjects.delete
  • 如果要在控制台中删除,请授予以下权限以查看主题: managedkafka.subjects.list

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

Managed Kafka Schema Registry Admin (roles/managedkafka.schemaRegistryAdmin) 角色还允许您删除主题。

如需详细了解预定义角色,请参阅 Managed Service for Apache Kafka 预定义角色

软删除正文

请确保满足以下条件:

  • 您要删除的主题未被其他架构引用。如果主题中的任何版本被其他架构引用,则删除请求会失败。

  • 主题所属的架构注册表或主题本身不得处于 Read-only 模式。

如需软删除主题,请按照以下步骤操作。

控制台

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

    前往架构注册表

  2. 点击包含要删除的主题的架构注册表的名称。

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

  4. 主题详情页面中,点击 删除

  5. 选择软删除

  6. 删除架构主题对话框中,在字段中输入 delete

  7. 点击删除。此操作会先软删除主题,然后再永久删除主题。

REST

必须使用 Authorization 标头中的访问令牌对请求进行身份验证。如需获取当前应用默认凭据的访问令牌,请运行以下命令:gcloud auth application-default print-access-token

如需使用 REST API 软删除数据正文,请使用 projects.locations.schemaRegistries.contexts.subjects.delete 方法向相应 URI 发出 DELETE 请求。

DELETE https://managedkafka.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/schemaRegistries/REGISTRY_ID/subjects/SUBJECT_ID
Authorization: Bearer $(gcloud auth application-default print-access-token)

如需使用 REST API 在特定情境下软删除某个正文,请使用 projects.locations.schemaRegistries.contexts.subjects.delete 方法向相应 URI 发出 DELETE 请求。

DELETE https://managedkafka.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/schemaRegistries/REGISTRY_ID/contexts/CONTEXT_ID/subjects/SUBJECT_ID
Authorization: Bearer $(gcloud auth application-default print-access-token)

替换以下内容:

  • PROJECT_ID(必需):您的 Google Cloud项目 ID。
  • LOCATION(必需):架构注册表所在的 Google Cloud 区域。
  • REGISTRY_ID(必需):您的架构注册表的 ID。
  • CONTEXT_ID(可选):上下文的 ID 或名称(如果删除特定上下文中的主题)。
  • SUBJECT_ID(可选):要删除的主题的 ID 或名称。

例如,如需从项目 test-gcp-project 和位置 us-central1 中的架构注册表 test_registry 中软删除 orders-topic-value,请发出以下请求:

DELETE https://managedkafka.googleapis.com/v1/projects/test-gcp-project/locations/us-central1/schemaRegistries/test_registry/subjects/orders-topic-value
Authorization: Bearer $(gcloud auth application-default print-access-token)

如果请求成功,API 会返回 200 OK 状态代码。响应正文包含一个 JSON 数组,其中包含已删除主题所对应的架构的版本号。

永久删除正文

永久删除主题的操作不可逆,还会删除所有关联的架构版本。

请确保满足以下条件:

  • 您要删除的主题未被其他架构引用。 如果主题中的任何版本被其他架构引用,则删除请求会失败。

  • 主题所属的架构注册表或主题本身不得处于 Read-only 模式。

  • 在继续删除之前,请备份所有必要的架构信息。

  • 不得有任何活跃的生产者或消费者依赖于此主题中的架构,因为删除此主题可能会导致中断。

控制台

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

    前往架构注册表

  2. 点击包含要删除的主题的架构注册表的名称。

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

  4. 主题详情页面中,点击 删除

  5. 选择永久删除

  6. 删除架构主题对话框中,在字段中输入 delete

  7. 点击删除。此操作会先软删除主题,然后再永久删除主题。

REST

如需使用 REST API 硬删除某个正文,您必须先软删除该正文。软删除后,您可以继续执行硬删除。

必须使用 Authorization 标头中的访问令牌对请求进行身份验证。如需获取当前应用默认凭据的访问令牌,请运行以下命令:gcloud auth application-default print-access-token

如需使用 REST API 硬删除数据正文,请向相应 URI 发出 DELETE 请求,其中包含 permanent=true 查询参数并使用 projects.locations.schemaRegistries.subjects.delete 方法。

DELETE https://managedkafka.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/schemaRegistries/REGISTRY_ID/subjects/SUBJECT_ID?permanent=true
Authorization: Bearer $(gcloud auth application-default print-access-token)

如需使用 REST API 在特定情境下永久删除某个正文,请向相应 URI 发出 DELETE 请求,其中包含 permanent=true 查询参数并使用 projects.locations.schemaRegistries.contexts.subjects.delete 方法。

DELETE https://managedkafka.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/schemaRegistries/REGISTRY_ID/contexts/CONTEXT_ID/subjects/SUBJECT_ID?permanent=true
Authorization: Bearer $(gcloud auth application-default print-access-token)

替换以下内容:

  • PROJECT_ID(必需):您的 Google Cloud项目 ID。
  • LOCATION(必需):架构注册表所在的 Google Cloud 区域。
  • REGISTRY_ID(必需):您的架构注册表的 ID。
  • CONTEXT_ID(可选):上下文的 ID(如果要在特定上下文中删除正文)。
  • SUBJECT_ID(可选):要删除的主题的 ID 或名称。

例如,如需从项目 test-gcp-project 和位置 us-central1 的架构注册表 test_registry 中硬删除之前软删除的主题 orders-topic-value,请发出以下请求:

DELETE https://managedkafka.googleapis.com/v1/projects/test-gcp-project/locations/us-central1/schemaRegistries/test_registry/subjects/orders-topic-value?permanent=true
Authorization: Bearer $(gcloud auth application-default print-access-token)

如果请求成功,API 会返回 200 OK 状态代码。响应正文包含一个 JSON 数组,其中包含已删除主题所对应的架构的版本号。

如需了解详情,请参阅 projects.locations.schemaRegistries.contexts.subjects.delete

恢复软删除的主题

如需恢复软删除的主题,请执行以下步骤。

控制台

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

    前往架构注册表

  2. 点击包含软删除主题的架构注册表的名称。

  3. 对于 过滤,请点击 取消 以清除软删除:否过滤条件。

  4. 点击要恢复的主题的名称。

  5. 主题详情页面中,点击 创建要恢复的版本

  6. 对于架构类型,请选择 Avro协议缓冲区

  7. 架构定义字段中,输入架构的定义。 请勿在架构字段名称中包含敏感信息,例如个人身份信息 (PII) 或安全数据。

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

    1. 点击 Add Schema reference
    2. 参考名称字段中,输入所引用架构的参考名称。
    3. 主题列表中,选择包含所引用架构的主题。
    4. 版本列表中,选择所引用架构的版本号。
    5. 点击确定

    针对每个引用的架构重复执行上述步骤。

  9. 点击创建

REST

如需恢复软删除的主题,请使用 schemaRegistries.subjects.versions.create 方法。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目 ID
  • LOCATION:架构注册表的位置
  • REGISTRY_ID:架构注册表的 ID
  • SUBJECT:主题名称
  • SCHEMA_DEFINITION:包含架构定义的字符串

HTTP 方法和网址:

POST https://managedkafka.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/schemaRegistries/REGISTRY_ID/subjects/SUBJECT/versions

请求 JSON 正文:

{
  "schema": "SCHEMA_DEFINITION"
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "id": SCHEMA_ID
}

后续步骤

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