本文档介绍了如何创建、查看和删除 Pub/Sub 精简版主题。
精简版主题概览
Pub/Sub Lite 服务需要一个主题,以便发布者向其发送消息,以便订阅者接收这些消息。在 Pub/Sub 精简版中,您可以选择创建可用区级或区域级精简版主题。
可用区级精简版主题和区域级精简版主题仅在数据复制方式上有所不同。所有其他主题属性均与本文档后面部分中所述的属性相同。
精简版主题中的数据复制
Pub/Sub Lite 区域级主题会将数据存储在单个区域的两个可用区中。Pub/Sub Lite 可用区级主题仅在一个可用区内复制数据。Pub/Sub Lite 会异步复制数据。
Pub/Sub Lite 的可用性取决于其底层组件(包括应用前端和存储空间)的可用性。
Pub/Sub Lite 可用区主题的可用性取决于其配置的可用区中的应用前端和存储空间的可用性。如果应用前端或存储空间发生可用区故障,则可用区 Lite 主题在服务中断期间将不可用。
Pub/Sub Lite 区域主题的可用性取决于其配置区域中的应用前端和存储空间的可用性。可能出现以下类型的失败:
如果应用前端或存储空间发生可用区级故障,区域级精简版主题仍可用。
如果应用前端和存储空间都发生可用区性故障,只要这两个组件未同时开始出现故障,区域性 Lite 版主题仍可供使用。
如果应用前端和存储同时发生故障,则在服务中断期间,地区性 Lite 版主题将无法使用。在此期间,客户端可能会无法发布或使用消息,但消息仍会按正确的顺序传送。
区域级精简版主题可防范大多数类型的单可用区故障。不过,在极少数情况下,复制的异步特性可能会导致单个可用区中的多个组件同时发生故障。因此,区域级精简版主题将变为不可用。
精简版主题的属性
精简版主题具有以下属性:
分区数量。分区是 Pub/Sub 精简版中并行处理的基本单元。精简版主题可以有一个或多个分区。
分区的容量。分区的容量由以下三个属性描述:
发布吞吐量 (MiBps)。您可以发布消息的最大速率。
订阅吞吐量 (MiBps)。将消息转发到精简版订阅的最大速率。
存储空间 (GiB)。分区中消息的大小上限。分区的可配置容量下限为 30 GiB。
精简版主题的存储容量。精简版主题中的所有分区都具有相同的配置存储容量。精简版主题的总存储容量是该主题中所有分区的存储容量的总和。例如,如果精简版主题有 8 个分区,每个分区的大小为 30 GiB,则精简版主题的总存储容量为 240 GiB(8 x 30)。
精简版主题的吞吐量容量。吞吐量容量由精简版主题中所有分区的发布和订阅吞吐量总容量组成。即使您有一个主题的总吞吐量可以达到 1 GiBps,但实际上限制吞吐量的是每个分区发布限制。
订阅方客户端和订阅数量限制。Pub/Sub Lite 支持为单个分区和单个订阅使用单个订阅方客户端。例如,对包含 5 个分区的主题的订阅最多可以有 5 个订阅者客户端从中使用消息。如果配置了更多订阅方客户端,则多余的客户端将保持空闲状态。具有 2 个订阅的同一主题最多可以有 10 个订阅者客户端,每个订阅 5 个客户端。
预订。预留是预配和管理多个主题的吞吐量容量的最简单方法。对于区域级精简版主题,使用预留预配吞吐量容量是必需的;对于可用区级精简版主题,则是可选的。
如果您不为区域级精简版主题使用预留,则必须明确预配该主题的发布和订阅吞吐量容量。如果不进行预留,精简版主题中的所有分区都具有相同的配置吞吐量容量。如需了解详情,请参阅在不预留的情况下配置吞吐量容量。
存储配置。如需配置存储空间,您必须同时指定存储容量和消息保留期限(可选)。
消息保留期限:精简版主题存储消息的最长时间。如果您未指定消息保留期限,Lite 主题会存储消息,直至超出存储容量。
存储空间容量。Pub/Sub 精简版主题容量取决于主题中的分区数和每个分区的存储容量。每个分区的存储空间是指每个分区的存储空间量(以字节为单位)。请注意,区域级精简版主题会针对发布的每个字节使用 2 字节的存储空间。可用区级精简版主题会针对发布的每个字节使用 1 字节的存储容量。
如果超出存储空间容量,Pub/Sub Lite 服务会继续发布消息。不过,为了腾出更多存储空间,系统会删除分区中最早的消息。即使消息在消息保留期限内,系统也会删除最早的消息。该服务绝不会在消息的 TTL 到期之前删除消息,除非必须移除这些消息以便为新发布的消息腾出空间。如需了解容量与价格的关系,请参阅 Pub/Sub 精简版价格。
主题命名准则
Pub/Sub Lite 资源名称用于唯一标识 Pub/Sub Lite 资源(例如主题、订阅或预订)。资源名称必须采用以下格式:
projects/project-identifier/collection/ID
project-identifier
:必须是 Google Cloud 控制台中提供的项目 ID 或项目编号。例如,my-cool-project
是项目 ID。123456789123
是项目编号。collection
:必须是topics
、subscriptions
或reservations
中的一个。ID
:必须符合以下准则:- 不以字符串
goog
开头 - 以字母开头
- 包含 3 到 255 个字符
- 仅包含以下字符:字母
[A-Za-z]
、数字[0-9]
、短划线-
、下划线_
、英文句点.
、波形符~
、加号+
和百分号%
您可以在资源名称中使用上述列表中的特殊字符,而无需进行网址编码。不过,在网址中使用任何其他特殊字符时,您必须确保对这些字符正确进行编码或解码。例如,
mi-tópico
是无效的 ID,不过,mi-t%C3%B3pico
是有效的。在进行 REST 调用时,此格式非常重要。- 不以字符串
提高精简版主题的吞吐量容量
如果您不使用精简版预留,则可以将任何可用区精简版主题的每个分区的吞吐量容量设置为以下限制设置的值:
发布吞吐量介于 4 到 16 MiBps 之间
订阅吞吐量介于 4 到 32 MiBps 之间
这些限制也适用于与 Lite 预订关联的分区。使用预留功能时,只要不超出预留的总容量,每个分区都可以使用指定限制范围内的任何吞吐量容量。(可选)您可以为每个分区的实际吞吐量设置下限,以提高流量的可预测性。
您可以增加主题中的分区数量,以横向扩缩主题。主题中的分区数不能减少。
当您更改分区数时,系统不会保留消息的相对顺序。在内部,系统会使用哈希函数将消息分配给分区。更新主题中的分区数会更改此哈希函数。分区数更新后发布的具有相同键的消息可能会映射到与更新之前发布的消息所在分区不同的分区。
此外,主题调整大小功能需要花费几秒钟的时间才能传播到所有发布商。在短时间内,有些发布商使用新哈希函数,而有些发布商仍使用旧哈希函数。
增加精简版主题的存储容量
您可以增加或减少精简版主题的存储空间。精简版主题为每个分区预配相同数量的存储。如果您将存储空间增加到 60 GiB,则每个分区都会获得 60 GiB 的存储空间。
如果您减少精简版主题的存储量,Pub/Sub Lite 服务会首先删除最早的消息。
如需了解容量与价格的关系,请参阅 Pub/Sub 精简版价格
创建精简版主题
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Pub/Sub Lite API 创建精简版主题。
如需查看可用区域和可用区的列表,请参阅 Pub/Sub 精简版位置。
控制台
前往精简版主题页面。
点击创建精简版主题。
如需创建可用区级精简版主题,请选择一个区域以及该区域内的可用区。
如需创建地区性精简版主题,请选择一个区域。
主题创建后,您无法更新其位置。
在名称部分中,输入精简版主题 ID。
精简版主题名称包括精简版主题 ID、位置和项目编号。
在吞吐量部分中:
选择或创建预订。
对于可用区级精简版主题,此字段为可选;对于区域级精简版主题,此字段为必填。
输入发布吞吐量峰值和订阅吞吐量峰值。
系统会根据您的输入自动设置多个分区。保存主题后,您可以修改此数量。
在消息存储部分中:
输入每个分区的存储空间。
选择消息保留期限的两个选项之一。
检查更改,然后点击创建。
gcloud
如需创建精简版主题,请使用 gcloud pubsub lite-topics create
命令:
gcloud pubsub lite-topics create TOPIC_ID \ --location=LOCATION \ --partitions=NUMBER_OF_PARTITIONS \ --per-partition-bytes=STORAGE_PER_PARTITION \ [--throughput-reservation=RESERVATION_NAME \] [--message-retention-period=MESSAGE_RETENTION_PERIOD]
替换以下内容:
TOPIC_ID:精简版主题的 ID
LOCATION:Pub/Sub 精简版支持的位置的名称
NUMBER_OF_PARTITIONS:精简主题中分区数的整数
STORAGE_PER_PARTITION:每个分区的存储空间量,例如
30GiB
RESERVATION_NAME:精简版预留的完全限定路径,例如
projects/123456789/locations/us-west1/reservations/my-reservation
MESSAGE_RETENTION_PERIOD:精简版主题存储消息的时间,例如
1d
或2w
如果请求成功,命令行会显示一条确认消息:
Created [TOPIC_ID].
协议
要创建精简版主题,请发送 POST
请求,如下所示:
POST https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID Authorization: Bearer $(gcloud auth print-access-token)
替换以下内容:
REGION:要在其中存储精简版主题的区域
PROJECT_NUMBER:要在其中创建精简版主题的项目的项目编号
LOCATION:Pub/Sub 精简版支持的位置的名称
TOPIC_ID:精简版主题的 ID
在请求正文中指定以下字段:
{ "partitionConfig": { "count": NUMBER_OF_PARTITIONS, "capacity": { "publishMibPerSec": publish_CAPACITY, "subscribeMibPerSec": subscribe_CAPACITY, } }, "retentionConfig": { "perPartitionBytes": STORAGE_PER_PARTITION, "period": MESSAGE_RETENTION_PERIOD, }, "reservationConfig": { "throughputReservation": RESERVATION_NAME } }
替换以下内容:
NUMBER_OF_PARTITIONS:精简主题中分区数的整数
STORAGE_PER_PARTITION:每个分区的存储空间量,例如
30GiB
publish_CAPACITY:一个整数,表示每个分区的发布吞吐量容量
subscribe_CAPACITY:一个整数,表示每个分区的订阅吞吐量容量
MESSAGE_RETENTION_PERIOD:精简版主题存储消息的时间,例如
1d
或2w
RESERVATION_NAME:精简版预留的完全限定路径,例如
projects/123456789/locations/us-west1/reservations/my-reservation
如果请求成功,则响应是 JSON 格式的精简版主题:
{ "name": projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID, "partitionConfig": { "count": NUMBER_OF_PARTITIONS, "capacity": { "publishMibPerSec": publish_CAPACITY, "subscribeMibPerSec": subscribe_CAPACITY, } }, "retentionConfig": { "perPartitionBytes": STORAGE_PER_PARTITION, "period": MESSAGE_RETENTION_PERIOD, }, "reservationConfig": { "throughputReservation": RESERVATION_NAME } }
Go
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Go 设置说明进行操作。
Java
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Java 设置说明进行操作。
Python
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Python 设置说明进行操作。
创建精简版主题后,您可以扩缩每个分区的吞吐量和存储空间容量。您也可以增加分区数,但不能减少。
更新精简版主题
您可以更新精简版主题的以下属性:
与精简版主题关联的预留
主题中的分区数量(只能增加)
发布和订阅吞吐量容量限制
每个分区的存储空间
消息保留类型
在扩缩主题的吞吐量容量或存储容量之前,请参阅扩缩吞吐量容量和扩缩存储容量。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Pub/Sub Lite API 更新精简版主题。
控制台
前往精简版主题页面。
点击精简版主题 ID。
点击修改。
您可以进行以下任一或全部更新:
- 使用其他预订。对于可用区级主题,您可以选择不使用预留。
- 输入分区数。此值可以增加,但不能减少。
- 启用或停用允许的最大发布和订阅吞吐量。
- 对于区域性主题,更新预留的发布和订阅吞吐量。 对于附加了预留的主题,更新后的吞吐量会反映新的上限。
- 修改每个分区的存储空间容量。
- 修改消息保留期限。
点击更新。
gcloud
要更新精简版主题,请使用 gcloud pubsub lite-topics update
命令:
gcloud pubsub lite-topics update TOPIC_ID \ --location=LOCATION \ --partitions=NUMBER_OF_PARTITIONS \ --per-partition-publish-mib=publish_CAPACITY \ --per-partition-subscribe-mib=subscribe_CAPACITY \ --per-partition-bytes=STORAGE_PER_PARTITION \ --message-retention-period=MESSAGE_RETENTION_PERIOD
替换以下内容:
TOPIC_ID:精简版主题的 ID
LOCATION:精简版主题所在的位置名称
NUMBER_OF_PARTITIONS:要为精简版主题配置的分区数。
publish_CAPACITY:一个整数,表示每个分区的发布吞吐量容量
subscribe_CAPACITY:一个整数,表示每个分区的订阅吞吐量容量
STORAGE_PER_PARTITION:每个分区的存储空间量,例如
30GiB
MESSAGE_RETENTION_PERIOD:精简版主题存储消息的时间,例如
1d
或2w
如果请求成功,命令行将显示精简版主题:
name: projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID partitionConfig: count: NUMBER_OF_PARTITIONS capacity: publishMibPerSec: publish_CAPACITY subscribeMibPerSec: subscribe_CAPACITY retentionConfig: perPartitionBytes: STORAGE_PER_PARTITION period: MESSAGE_RETENTION_PERIOD
协议
要更新精简版主题,请发送 PATCH
请求,如下所示:
PATCH https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID?updateMask=partitionConfig.capacity,retentionConfig.perPartitionBytes,retentionConfig.period,partitionConfig.count Authorization: Bearer $(gcloud auth print-access-token)
替换以下内容:
REGION:精简版主题所在的区域
PROJECT_NUMBER:具有精简版主题的项目的项目编号
LOCATION:精简版主题所在的位置名称
TOPIC_ID:精简版主题的 ID
在请求正文中指定以下字段:
{ "partitionConfig": { "count": NUMBER_OF_PARTITIONS, "capacity": { "publishMibPerSec": publish_CAPACITY, "subscribeMibPerSec": subscribe_CAPACITY, } }, "retentionConfig": { "perPartitionBytes": STORAGE_PER_PARTITION, "period": MESSAGE_RETENTION_PERIOD, }, }
替换以下内容:
publish_CAPACITY:一个整数,表示每个分区的发布吞吐量容量
subscribe_CAPACITY:一个整数,表示每个分区的订阅吞吐量容量
STORAGE_PER_PARTITION:每个分区的存储空间量,例如
30GiB
MESSAGE_RETENTION_PERIOD:精简版主题存储消息的时间,例如
1d
或2w
NUMBER_OF_PARTITIONS:要为精简版主题配置的分区数。
如果请求成功,则响应是 JSON 格式的精简版主题:
{ "name": projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID, "partitionConfig": { "count": NUMBER_OF_PARTITIONS, "capacity": { "publishMibPerSec": publish_CAPACITY, "subscribeMibPerSec": subscribe_CAPACITY, } }, "retentionConfig": { "perPartitionBytes": STORAGE_PER_PARTITION, "period": MESSAGE_RETENTION_PERIOD, }, }
Go
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Go 设置说明进行操作。
Java
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Java 设置说明进行操作。
Python
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Python 设置说明进行操作。
查看精简版主题详情
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Pub/Sub Lite API 获取有关精简版主题的详细信息。
控制台
前往精简版主题页面。
点击精简版主题 ID。
gcloud
如需获取有关精简版主题的详细信息,请使用 gcloud pubsub lite-topics describe
命令:
gcloud pubsub lite-topics describe TOPIC_ID \ --location=LOCATION
替换以下内容:
TOPIC_ID:精简版主题的 ID
LOCATION:精简版主题所在的位置名称
如果请求成功,命令行将显示精简版主题:
name: projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID partitionConfig: count: NUMBER_OF_PARTITIONS capacity: publishMibPerSec: publish_CAPACITY subscribeMibPerSec: subscribe_CAPACITY retentionConfig: perPartitionBytes: STORAGE_PER_PARTITION period: MESSAGE_RETENTION_PERIOD
协议
如需获取有关精简版主题的详细信息,请发送 GET
请求,如下所示:
GET https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID Authorization: Bearer $(gcloud auth print-access-token)
替换以下内容:
REGION:精简版主题所在的区域
PROJECT_NUMBER:具有精简版主题的项目的项目编号
LOCATION:精简版主题所在的位置名称
TOPIC_ID:精简版主题的 ID
如果请求成功,则响应是 JSON 格式的精简版主题:
{ "name": projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID, "partitionConfig": { "count": NUMBER_OF_PARTITIONS, "capacity": { "publishMibPerSec": publish_CAPACITY, "subscribeMibPerSec": subscribe_CAPACITY, } }, "retentionConfig": { "perPartitionBytes": STORAGE_PER_PARTITION, "period": MESSAGE_RETENTION_PERIOD, }, }
Go
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Go 设置说明进行操作。
Java
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Java 设置说明进行操作。
Python
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Python 设置说明进行操作。
列出精简版主题
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Pub/Sub Lite API 列出项目中的精简版主题。
控制台
如需查看项目中的精简版主题列表,请前往精简版主题页面。
gcloud
- 如需列出项目中的精简版主题,请使用
gcloud pubsub lite-topics list
命令:
gcloud pubsub lite-topics list \ --location=LOCATION
将 LOCATION 替换为精简版主题的位置名称。
如果请求成功,命令行将显示精简版主题:
--- name: projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID partitionConfig: count: NUMBER_OF_PARTITIONS capacity: publishMibPerSec: publish_CAPACITY subscribeMibPerSec: subscribe_CAPACITY retentionConfig: perPartitionBytes: STORAGE_PER_PARTITION period: MESSAGE_RETENTION_PERIOND --- name: projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID partitionConfig: count: NUMBER_OF_PARTITIONS capacity: publishMibPerSec: publish_CAPACITY subscribeMibPerSec: subscribe_CAPACITY retentionConfig: perPartitionBytes: STORAGE_PER_PARTITION period: MESSAGE_RETENTION_PERIOND
协议
如需列出项目中的精简版主题,请发送 GET
请求,如下所示:
GET https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/topics Authorization: Bearer $(gcloud auth print-access-token)
替换以下内容:
REGION:精简版主题所在的区域
PROJECT_NUMBER:具有精简版主题的项目的项目编号
如果请求成功,则响应为 JSON 格式的精简版主题列表:
{ "topics": [ { "name": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID", }, { "name": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID", } ] }
Go
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Go 设置说明进行操作。
Java
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Java 设置说明进行操作。
Python
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Python 设置说明进行操作。
删除精简版主题
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Pub/Sub Lite API 删除精简版主题。
控制台
前往精简版主题页面。
点击精简版主题 ID。
在精简版主题详情页面中,点击删除。
在显示的字段中,输入
delete
以确认您想要删除精简版主题。点击删除。
gcloud
要删除精简版主题,请使用 gcloud pubsub lite-topics delete
命令:
运行
delete
命令:gcloud pubsub lite-topics delete TOPIC_ID \ --location=LOCATION
替换以下内容:
TOPIC_ID:精简版主题的 ID
LOCATION:精简版主题所在的位置名称
如需确认,请输入
Y
。
如果请求成功,则响应为以下内容:
Deleted topic [TOPIC_ID].
协议
要删除精简版主题,请发送 DELETE
请求,如下所示:
DELETE https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID Authorization: Bearer $(gcloud auth print-access-token)
替换以下内容:
REGION:精简版主题所在的区域
PROJECT_NUMBER:具有精简版主题的项目的项目编号
LOCATION:精简版主题所在的位置名称
TOPIC_ID:精简版主题的 ID
如果请求成功,响应将为空的 JSON 对象。
Go
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Go 设置说明进行操作。
Java
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Java 设置说明进行操作。
Python
在运行此示例之前,请按照 Pub/Sub Lite 客户端库中的 Python 设置说明进行操作。
如果删除精简版主题,则无法向其发布消息。精简版主题仍然存在,但您无法从精简版订阅接收消息。
后续步骤
- 向精简版主题发布消息。
- 针对精简版主题创建精简版订阅。
- 接收精简版订阅的消息。