Pub/Sub 配额和限制

Google Cloud 使用配额来限制您可以使用的特定共享 Google Cloud 资源的数量。每个配额代表一个特定的可数资源,例如对特定服务的 API 调用次数、发送到特定服务的字节数,或您的项目并发使用的流式传输连接数。

许多服务还具有与配额系统无关的限制。这些限制(例如消息大小上限或您可以在项目中创建的 Pub/Sub 资源数量)是固定限制,无法增加或减少。

查看和管理配额

对于给定项目,您可以使用 IAM 和管理配额信息中心来查看当前配额限制和用量。您还可以使用此信息中心执行以下操作:

  • 降低配额限制
  • 申请更高配额限制

如需详细了解如何监控配额使用情况并发出提醒,请参阅监控

配额用量归因

对于推送订阅者吞吐量,系统会将配额用量计入包含相应推送订阅的项目。这是订阅名称中显示的项目。

对于所有其他配额,系统会从与请求中指定的凭据关联的项目中扣除相应使用费用。系统不会将配额用量计入包含所请求资源的项目。

例如:如果项目 A 中的服务账号发送一个发布请求,发布到项目 B 中的主题,系统会将此请求计入项目 A 的配额。在某些情况下,您可能希望将配额用量计入其他项目。您可以使用 X-Goog-User-Project 系统参数更改配额归因的项目。如需详细了解 X-Goog-User-Project,请参阅系统参数

您可以使用 gcloud CLI 为特定请求设置配额归因项目。gcloud CLI 会发送 X-Goog-User-Project 请求标头。

您必须拥有 roles/serviceusage.serviceUsageConsumer 角色或对要用于配额分配的项目具有 serviceusage.services.use 权限的自定义角色。

以下示例展示了如何获取项目 RESOURCE_PROJECT 中的订阅列表,同时向项目 QUOTA_PROJECT 计费管理员操作配额。在 Google Cloud CLI 终端中运行以下命令:

gcloud pubsub subscriptions list --project=
RESOURCE_PROJECT --billing-project=
QUOTA_PROJECT

QUOTA_PROJECT 替换为您要对其收取配额费用的 Google Cloud 项目的 ID。

请注意,在 Pub/Sub 中,计费项目始终是包含相应资源的项目。您只能更改配额归因的项目。

Pub/Sub 配额

API 和服务配额信息中心中可以按项目查看和修改下表中列出的配额。

区域配额分为 3 种类型:

  • 较大区域:europe-west1europe-west4us-central1us-east1us-east4us-west1us-west2
  • 中等区域:asia-east1asia-northeast1asia-southeast1europe-west2europe-west3
  • 较小区域:所有其他区域

“仅传送一次”传送配额因区域而异。请查看下表,了解各个区域的详细信息。

配额 默认配额限制 说明
每个区域的发布者吞吐量
  • 较大区域:2.4 亿 kB/分钟(4 GB/秒)
  • 中等区域:4800 万 kB/分钟(800 MB/秒)
  • 较小区域:1200 万 kB/分钟(200 MB/秒)

pubsub.googleapis.com/regionalpublisher

配额用量按发布的 PubsubMessage 大小计算:

请注意,单个发布请求中可以包含多条消息,系统不会再另外按每条消息计算配额。

每个区域的拉取订阅者吞吐量
  • 较大区域:2.4 亿 kB/分钟(4 GB/秒)
  • 中等区域:4800 万 kB/分钟(800 MB/秒)
  • 较小区域:2400 万 kB/分钟(400 MB/秒)

pubsub.googleapis.com/regionalsubscriber

配额用量按返回的 PubsubMessage 大小计算:

每个区域的 Acknowledger 吞吐量
  • 较大区域:2.4 亿 kB/分钟(4 GB/秒)
  • 中等区域:4800 万 kB/分钟(800 MB/秒)
  • 较小区域:2400 万 kB/分钟(400 MB/秒)

pubsub.googleapis.com/regionalacknowledger

配额用量按 AcknowledgeModifyAckDeadline 请求的大小计算:

每个区域的推送订阅吞吐量
  • 较大区域:2640 万 kB/分钟(440 MB/秒)
  • 中等区域:8400 万 kB/分钟(140 MB/秒)
  • 较小区域:240 万 kB/分钟(40 MB/秒)

pubsub.googleapis.com/regionalpushsubscriber

对于向推送端点发出的推送传送请求,配额用量按发送到推送端点的 PubsubMessage 大小计算。

BigQuery 订阅 每个区域的吞吐量
  • 较大区域:2.4 亿 kB/分钟(4 GB/秒)
  • 中等区域:4800 万 kB/分钟(800 MB/秒)
  • 较小区域:1200 万 kB/分钟(200 MB/秒)

pubsub.googleapis.com/regionalpushbigquerysubscriber

对于向 BigQuery 发出的请求,配额用量按发送到 BigQuery 的 PubsubMessage 大小计算。

每个区域的 Cloud Storage 订阅吞吐量
  • 较大区域:2.4 亿 kB/分钟(4 GB/秒)
  • 中等区域:4800 万 kB/分钟(800 MB/秒)
  • 较小区域:1200 万 kB/分钟(200 MB/秒)

pubsub.googleapis.com/regionalpushcloudstoragesubscriber

对于向 Cloud Storage 发出的请求,配额用量按发送到 Cloud Storage 的 PubsubMessage 大小计算。

每个区域的 StreamingPull 订阅者吞吐量
  • 较大区域:2.4 亿 kB/分钟(4 GB/秒)
  • 中等区域:4800 万 kB/分钟(800 MB/秒)
  • 较小区域:2400 万 kB/分钟(400 MB/秒)

pubsub.googleapis.com/regionalstreamingpullsubscriber

配额用量按流式传输到订阅者的 PubsubMessage 大小计算:

请注意,客户端库会尽可能使用 StreamingPull 操作。

每个区域内打开的 StreamingPull 连接数
  • 较大区域:同时可打开 72000 个连接
  • 中等区域:同时可打开 48,000 个连接
  • 较小区域:同时可打开 24000 个连接

pubsub.googleapis.com/regionalstreamingpullconnections

在任何给定时间打开的 StreamingPull 连接数。 请参阅 StreamingPull

管理员操作 每分钟 6000 次(100 次操作/秒)

pubsub.googleapis.com/administrator

每次管理员操作(例如 GetTopicRequest)消耗一个配额单位。

Get*List*Create*Delete*Update*ModifyPushConfigSetIamPolicyGetIamPolicyTestIamPermissionsValidateSchemaValidateMessageCommitSchemaRollbackSchemaDeleteSchemaRevisionListSchemaRevisionsDetachSubscription 属于管理员操作。

每个区域从启用了恰好一次传送的订阅中消耗的消息数
  • us-central1 中每分钟 100 万条消息
  • us-east1 中的每分钟消息量上限为 70 万条
  • us-west1 中的每分钟消息量上限为 30 万条
  • 其他区域:每分钟 18 万条消息

pubsub.googleapis.com/exactlyoncedeliveredmessagecount

配额用量基于订阅者消耗的 PubsubMessage 数量计算:

在启用仅传送一次功能的情况下,每个区域内已确认或已延长截止期限的消息数量
  • us-central1 中的每分钟消息量为 1,000 万条
  • us-east1 中的每分钟消息数上限为 700 万条
  • us-west1 区域:每分钟 300 万条消息
  • 其他区域:每分钟 180 万条消息

pubsub.googleapis.com/exactlyonceackcount

配额用量按 AcknowledgeModifyAckDeadline 请求中的确认 ID 数量计算:

吞吐量配额单位

吞吐量配额使用量以 1 kB 为单位计量。1 kB 为 1000 个字节。例如,如果某个 PublishRequest 包含 105 条消息,每条消息的大小为 50 个字节,用户数据大小为 105 * 50 bytes = 5250 bytes,则配额使用量为 max(1kB, ceil(5250 bytes/1000)) = 6kB

资源限制

资源 限制
项目 10000 个主题
10000 个附加或分离的订阅
5000 个快照
10000 个架构
主题 10000 个附加的订阅
5000 个附加的快照
如果配置了主题消息保留功能,则发布到主题的消息可以自发布之时起在永久性存储中保留 31 天。
订阅 默认情况下,从发布时算起,未确认的消息可以在永久性存储空间中保留 7 天。保留的消息无数量限制。
如果订阅者没有使用订阅,该订阅将会过期。 默认有效期为 31 天。
架构 架构大小(definition 字段):300KB
每个架构的修订次数:20
发布请求 10 MB(总大小)
1000 条消息
消息 消息大小(data 字段):10 MB
每条消息的特性数目:100
特性键大小:256 字节
特性值大小:1024 字节
StreamingPull 流 每个打开的流 10 MBps
一元拉取响应 拉取响应中的消息数量上限:1,000
拉取响应大小上限:10 MB
拉取/StreamingPull 消息 该服务可能会对每个连接的未完成 StreamingPull 消息总数施加限制。如果遇到此类限制,请提高您确认消息的速率并增加使用的连接数。
Acknowledge 和 ModifyAckDeadline 请求 512 KB(总大小)
排序键 如果消息具有排序键,则每个排序键的发布者吞吐量上限为 1 MBps。
Cloud Storage 存储桶对象 使用 Cloud Storage 导入主题时,存储桶中的对象数量上限为 5, 000 万。

使用服务账号可获得更高的配额

如果您将 Google Cloud CLI 工具与普通用户账号(即非服务账号)搭配使用,则系统会将 Pub/Sub 操作限制为适合手动操作的速率。超过此限制的速率将导致 RESOURCE_EXHAUSTED 错误。解决此问题的方案是确保您使用的是服务账号凭据。如果您希望使用 gcloud CLI 提供的凭据实现自动化,请为您的 Pub/Sub 操作激活服务账号

使用位置端点路由请求

如果您在特定区域中有额外配额,则可以使用位置型 Pub/Sub 端点将请求路由到这些区域。将消息发布到全球端点时,Pub/Sub 服务可能会将流量路由到配额不足的区域。

配额不匹配

发布或接收的消息小于 1000 字节时,可能会发生配额不匹配问题。例如:

  • 如果分别在不同的请求中发布 10 条 500 字节的消息,则发布者配额用量将为 10000 个字节。这是因为小于 1000 字节的消息会自动向上取整到下一个 1000 字节增量。

  • 如果您在单个拉取响应中收到这 10 条消息,则您的订阅者配额用量可能仅为 5 kB,因为系统会将每条消息的实际大小加总来确定总体配额。

  • 反之亦然。如果您在单个发布请求中发布多条消息,或者分别在不同的拉取请求中接收消息,则订阅者配额用量可能会大于发布者配额用量。