Pubsub 拉取订阅和并发
Pubsub pull subscriptions and concurrency
我正在从推送订阅转向拉取订阅,并且我已经阅读了 Google 关于 pubsub 并发的文档。他们的示例使用执行器来订阅主题。这被配置为有 4 个线程,默认为 1 个 puller(因此 2 个 puller 将使用 8 个线程)。当我 startAsync 时,我认为客户端打开了一个流式拉取,它可能会保持打开状态一段时间(也许)。我的问题是,每个订阅是否有 1 个执行程序,或者所有订阅是否有一个执行程序(因此有一个线程池)。我有大约 200 个订阅,所以 4 个线程 x 200 听起来不对。那怎么调呢?我是否只是从一个具有 10 个线程的 Executor 开始处理所有订阅和负载测试?如果有人对此有经验,很高兴听到您的想法。
默认情况下,Subscriber
的每个实例都有自己的 executorProvider
和 systemExecutorProvider
,它们会创建多个线程。前者的默认创建 5 threads and for the latter creates max(6, parallelPullCount)
threads.
可以通过 Subscriber.Builder.setExecutorProvider
and Subscriber.Builder.setSystemExecutorProvider
methods. You could provide the same ExecutorProvider
to them, e.g. a FixedExecutorProvider
.
设置这些提供程序来覆盖此行为
但是,如果您打算在同一作业中从 200 个订阅中提取消息,那么如果可以的话,最好使用 push subscriptions。您将在您的作业中设置一个 https 端点,并将所有 200 个订阅上的推送端点设置到同一端点。所有消息都可以通过相同的代码路径进行处理,并且您不会有每个消息的 Subscriber
实例的开销。
我正在从推送订阅转向拉取订阅,并且我已经阅读了 Google 关于 pubsub 并发的文档。他们的示例使用执行器来订阅主题。这被配置为有 4 个线程,默认为 1 个 puller(因此 2 个 puller 将使用 8 个线程)。当我 startAsync 时,我认为客户端打开了一个流式拉取,它可能会保持打开状态一段时间(也许)。我的问题是,每个订阅是否有 1 个执行程序,或者所有订阅是否有一个执行程序(因此有一个线程池)。我有大约 200 个订阅,所以 4 个线程 x 200 听起来不对。那怎么调呢?我是否只是从一个具有 10 个线程的 Executor 开始处理所有订阅和负载测试?如果有人对此有经验,很高兴听到您的想法。
默认情况下,Subscriber
的每个实例都有自己的 executorProvider
和 systemExecutorProvider
,它们会创建多个线程。前者的默认创建 5 threads and for the latter creates max(6, parallelPullCount)
threads.
可以通过 Subscriber.Builder.setExecutorProvider
and Subscriber.Builder.setSystemExecutorProvider
methods. You could provide the same ExecutorProvider
to them, e.g. a FixedExecutorProvider
.
但是,如果您打算在同一作业中从 200 个订阅中提取消息,那么如果可以的话,最好使用 push subscriptions。您将在您的作业中设置一个 https 端点,并将所有 200 个订阅上的推送端点设置到同一端点。所有消息都可以通过相同的代码路径进行处理,并且您不会有每个消息的 Subscriber
实例的开销。