Data Pipelines 有时会遇到发布流量高峰。除非您已做好准备,否则流量高峰可能会让订阅者不堪重负。避免流量高峰的一种简单解决方案是动态增加 Pub/Sub 订阅者资源,以便处理更多消息。不过,此解决方案可能会增加费用或无法立即生效。例如,您可能需要大量虚拟机。
订阅者端的流量控制功能可让订阅者调节消息的接收速率。因此,流量控制功能可在不增加费用或在订阅者扩缩之前处理流量高峰。
流控制是 Pub/Sub 高级别客户端库中的一项可用功能。使用低级客户端库时,您还可以实现自己的流量控制编程。
如果需要实施流控制,则表明消息的发布速率高于消耗速率。如果此状态长时间存在,而不是在消息量瞬态峰值时出现,请考虑增加订阅者客户端实例的数量。
流控制配置
借助流量控制,您可以配置为未完成请求分配的最大字节数以及允许的未完成消息的最大数量。请根据客户端机器的吞吐量容量设置这些限制。
不同客户端库的流控制变量的默认值和变量名称可能有所不同。例如,在 Java 客户端库中,以下变量用于配置流量控制:
setMaxOutstandingElementCount()。用于定义 Pub/Sub 尚未收到确认或否定确认的消息数量上限。
setMaxOutstandingRequestBytes()。用于定义 Pub/Sub 尚未收到确认或否定确认的消息的最大大小。
如果超过 setMaxOutstandingElementCount()
或 setMaxOutstandingRequestBytes()
的限制,订阅者客户端不会再拉取更多消息。此行为会一直持续,直到已提取的消息得到确认或否定确认。这样一来,我们就可以将吞吐量与运行更多订阅者相关的费用保持一致。
流量控制的代码示例
如需控制订阅者客户端接收消息的速率,请使用订阅者的流控制功能。以下示例演示了这些流控制功能:
C++
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 C++ 设置说明进行操作。如需了解详情,请参阅 Pub/Sub C++ API 参考文档。
C#
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 C# 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub C# API 参考文档。
Go
以下示例使用 Go Pub/Sub 客户端库的主要版本 (v2)。如果您仍在使用 v1 库,请参阅迁移到 v2 的指南。如需查看 v1 代码示例的列表,请参阅 已弃用的代码示例。
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Go API 参考文档。
Java
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Java API 参考文档。
Node.js
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Node.js API 参考文档。
Node.js
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Node.js API 参考文档。
Python
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Python 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Python API 参考文档。
Ruby
以下示例使用 Ruby Pub/Sub 客户端库 v3。如果您仍在使用 v2 库,请参阅 迁移到 v3 的指南。如需查看 Ruby v2 代码示例的列表,请参阅 已弃用的代码示例。
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Ruby 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Ruby API 参考文档。
后续步骤
了解您可以为订阅配置的其他传送选项: