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 参考文档。
后续步骤
了解您可以为订阅配置的其他传送选项: