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