Google PubSub Pull 与 Streaming Pull 的区别
Posted
技术标签:
【中文标题】Google PubSub Pull 与 Streaming Pull 的区别【英文标题】:Google PubSub Pull vs Streaming Pull differences 【发布时间】:2019-10-05 02:05:50 【问题描述】:我正在阅读来自 Google 的 documentation 关于拉取与流拉取的内容,但不太明白。有人可以向我解释其中的区别吗?如果有人实施了它并且可以指出我的资源,也会有所帮助。 非常感谢。
【问题讨论】:
【参考方案1】:使用 Cloud Pub/Sub 拉取时,发送一个 PullRequest
并接收一个 PullResponse
,其中最多包含请求中指定的消息数量(如果在获取消息时出现问题,则会出错)。每个请求都有一个对应的响应。通过流式拉取,发送一个StreamingPullRequest
,它会打开一个流,沿该流接收数据。当流打开时,Cloud Pub/Sub 将发送 StreamingPullResponse
以及更多消息,只要消息可用于传递。单个请求可以导致许多响应。
一般来说,为了获得最高的吞吐量和最低的延迟,流式拉取是正确的选择。流式拉取保持与 Cloud Pub/Sub 的连接打开,因此消息可以在可用时立即发送到该连接。仅使用 pull 来实现这些属性可能很困难。如果没有流,则只能在有明确请求进入时才能传递消息。这些消息可能已经准备好传递一段时间了。为了通过拉取实现高吞吐量和低延迟,必须同时有许多未完成的请求,其中一旦旧请求收到响应就会创建新请求。当订阅者需要更多地控制消息何时到达并且延迟/吞吐量不是问题时,使用拉取是有意义的。
Cloud Pub/Sub client libraries 建立在流式拉取之上,因此如果您可以使用其中之一,则可以避免直接实现流式拉取调用。所有客户端库都是开源的,因此如果您想查看直接进行流式拉取调用的示例,可以查看代码。例如,Java 有StreamingSubscriberConnection
。
【讨论】:
很难相信这样一个写得很好的答案没有一个赞成和/或接受的标记。来,投我一票! 这是一个非常好的答案。但是这个问题在softwareengineering.stackexchange.com 上不是更有意义吗?以上是关于Google PubSub Pull 与 Streaming Pull 的区别的主要内容,如果未能解决你的问题,请参考以下文章
Google Pubsub Python 客户端库订阅者随机崩溃
Google Pub/Sub 如何在 Pull 上设置读取超时