【发布时间】:2020-10-18 01:20:47
【问题描述】:
我们以“尖峰”方式使用 Google PubSub,我们在短时间内(约 10 分钟)发布数百万条小消息( 我们注意到,随着这些积压工作的大小从 100 万增加到 1000 万,在某些小时内从低于 1% 到超过 10%,我们注意到重新传递的消息有所增加。
来自 GAE 任务拉取队列世界,我们假设工作人员会通过从 PubSub 订阅中拉取消息来“租用”消息,其中从拉取时开始,工作人员将有 10 分钟的时间来确认消息. 然而,在添加日志记录之后(参见下面重新发布消息的示例),似乎发生的事情不是从拉取到确认的时间,而是从发布消息到确认的时间。
这是对 PubSub 确认截止日期以及随后的重新交付行为的正确理解吗?
如果是这样,我们是否应该确保订阅的消息积压仅增长到工作线程能够在为订阅的确认截止日期配置的时间内处理和确认的大小,以使重新传递率低于 0.1%平均的? 尽管 GAE 拉取任务队列租赁行为似乎更直观,但我们可能可以让发布者根据订阅积压大小应用某种背压。
此外,https://cloud.google.com/pubsub/docs/subscriber#push-subscription 中的“Pull subscription”下的措辞:“订阅应用程序显式调用 pull 方法,它请求传递消息”似乎暗示确认超时在客户端 pull 调用返回给定的留言?
注意:我们使用 Python PubSub API (google-cloud-pubsub),但不是默认的流式传输行为,因为这会导致 PubSub 文档中描述的“消息囤积”,因为我们发布了大量的小消息。相反,我们调用subscriber_client.pull 并确认(这似乎是围绕PubSub 服务API 调用的薄包装)
PullMessage.ack: 1303776574755856 delay from lease: 0:00:35.032463 (35.032463 seconds), publish: 0:10:02.806571 (602.806571 seconds)
【问题讨论】: