【发布时间】:2021-12-12 05:58:54
【问题描述】:
我正在从推送订阅转向拉取订阅,并且我已经阅读了来自 Google 的关于 pubsub 并发的文档。他们的示例使用 Executor 订阅主题。这被配置为具有 4 个线程,默认为 1 个拉拔器(因此 2 个拉拔器将使用 8 个线程)。当我 startAsync 时,我认为客户端打开了一个流式拉取,它可能会保持打开一段时间(也许)。我的问题是,每个订阅是否有 1 个执行程序,或者是否有所有订阅的执行程序(以及线程池)。我有大约 200 个订阅,所以 4 个线程 x 200 听起来不对。那么如何进行调优呢?我是否只是从一个有 10 个线程处理所有订阅和负载测试的 Executor 开始?如果有人有这方面的经验,很高兴听到你的想法。
【问题讨论】:
-
您使用哪种语言?
-
我正在使用 Java 客户端
-
您可能误解了线程部分。线程正在订阅者上实现。你能更详细地说明你的架构吗?或者您的意思是您在一个订阅中拥有 200 个订阅者?如果默认情况下是这种情况,每个订阅者有 4 个线程,它应该能够处理消息。如果您发现订阅有很多未确认的消息,您可以调整每个订阅者的线程数(可以在 Cloud Monitoring 中查看)。
-
所以 100 个主题,每个主题有 2 个订阅者。我想知道订阅者是共享一个 ExecutorProvider 还是每个订阅者都拥有自己的执行者?他们的示例非常简单,只有 1 个主题和 1 个订阅者。我只是对我的线程数感到好奇。
-
所以也许我不应该担心。那里的例子说......“提供用于处理消息的执行程序服务。订阅者使用的默认
executorProvider的默认线程数为5。”因此,默认情况下,每个订阅者必须拥有 5 个线程。所以 200 个拉订阅者......这似乎是很多线程。