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 请求的大小计算:

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

pubsub.googleapis.com/regionalpushsubscriber

对于向推送端点发出的推送传送请求,配额用量按发送到推送端点的 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 中每分钟发送 1000 万条消息
  • 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 字段):50KB
每个架构的修订版本:20
发布请求 10 MB(总大小)
1000 条消息
消息 消息大小(data 字段):10 MB
每条消息的属性:100
属性键大小:256 字节
属性值大小:1024 字节
StreamingPull 流 每个打开的流 10 MB/每秒
一元拉取响应 拉取响应中的消息数量上限:1000
拉取响应的大小上限:10 MB
拉取/StreamingPull 消息 该服务可能会对每个连接的未完成 StreamingPull 消息总数施加限制。如果遇到此类限制,请提高您确认消息的速率并增加使用的连接数。
确认和 ModifyAckDeadline 请求 512 KB(总大小)
排序键 如果消息具有排序键,则每个排序键的发布者吞吐量上限为 1 MBps。

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

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

使用位置端点路由请求

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

配额不匹配

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

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

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

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