我的应用程序正在使用绑定到GCP pubsub的Spring Cloud Stream接收消息。我正在尝试以下配置参数:
spring.cloud.gcp.pubsub.subscriber.executor-threads
spring.cloud.stream.bindings.<channelName>.consumer.concurrency
应用程序具有3个不同的通道,每个通道都定义了一个使用者组。该应用程序的多个实例将在生产环境中(在kubernetes上)运行。
我试图找到正确的设置进行配置,以确定每个应用程序实例中可以并行处理多少条消息。我已经在本地计算机上进行了试验,以调整上述两个参数,但是似乎只有执行程序线程才有效。如果将其设置为5,并将一堆消息泵入系统,则在消息处理日志中看到5个线程。如果将其增加到10,我在那里看到10个线程。但是,并发参数似乎什么也没做,无论它是设置为1还是10或其他任何值。
这些参数之间的关系是什么?并发参数是否仅用于其他绑定程序(例如Rabbit或Kafka)?
谢谢。
答案 0 :(得分:3)
spring.cloud.gcp.pubsub.subscriber.executor-threads
spring.cloud.gcp.pubsub.subscriber.parallel-pull-count
Spring Cloud GCP中的这两个配置选项与Pub / Sub的Java client library中的setExecutorThreadCount
和setParallelPullCount
相同。他们控制行为
您的Pub/Sub订户客户端。
parallel-pull-count
确定订阅者客户端打开多少个流来接收消息,而executor-threads
确定订阅者客户端使用多少线程来处理消息回调(消息被确认,因此发布/订阅服务不会再次发送给您)。例如,当您将parallel-pull-count
设置为2并将executor-threads
设置为4时,消息将通过2个流进入,并且8个线程将忙于处理它们。有关更多信息,请参见Concurrency Control。
spring.cloud.stream.bindings.<channelName>.consumer.concurrency
您是正确的,此配置选项仅适用于某些活页夹。为了在使用者组中设置并发性,必须对生产者进行分区。但是,发布/订阅的Spring Cloud Stream绑定程序当前执行not support partitioning,因此您将无法设置并发性。
我正在尝试寻找正确的设置来进行配置,以确定每个应用程序实例中可以并行处理多少条消息。
为实现最大吞吐量,我将使用上面的前两个配置选项,同时还要记住,处理时间超过确认期限的消息将过期,并且发布/订阅服务将重新分发它们。