Настройки параллелизма для потребителя Spring Cloud Stream с пабом GCP - PullRequest
1 голос
/ 18 февраля 2020

Мое приложение получает сообщения с использованием Spring Cloud Stream, привязанного к GCP pubsub. Я экспериментирую со следующими параметрами конфигурации:

spring.cloud.gcp.pubsub.subscriber.executor-threads
spring.cloud.stream.bindings.<channelName>.consumer.concurrency

Приложение имеет 3 разных канала, для каждого из которых определена группа потребителей. Несколько экземпляров приложения будут запущены в производство (в kubernetes).

Я пытаюсь найти правильные параметры для настройки, чтобы определить, сколько сообщений можно обрабатывать параллельно в каждом экземпляре приложения. Я экспериментировал на своей локальной машине с настройкой обоих вышеперечисленных параметров, но, похоже, только потоки executor имеют какой-либо эффект. Если я установлю его на 5 и накачаю кучу сообщений в систему, я увижу 5 потоков в моих журналах обработки сообщений. Если я увеличу его до 10, я вижу там 10 потоков. Однако параметр параллелизма, похоже, ничего не делает, независимо от того, установлен он в 1 или 10. или как угодно.

Какая связь между этими параметрами, если есть? Параметр параллелизма используется только для других папок, таких как Rabbit или Kafka?

Спасибо.

1 Ответ

2 голосов
/ 25 февраля 2020
spring.cloud.gcp.pubsub.subscriber.executor-threads
spring.cloud.gcp.pubsub.subscriber.parallel-pull-count

Эти два параметра конфигурации в Spring Cloud GCP идентичны setExecutorThreadCount и setParallelPullCount в клиентской библиотеке Pub / Sub * Java . Они контролируют поведение вашего Pub / Sub клиентского клиента.

parallel-pull-count определяет, сколько потоков ваш клиентский клиент открывает для получения сообщений, а executor-threads определяет, сколько потоков использует ваш клиентский клиент. обрабатывать обратные вызовы сообщений (когда сообщения подтверждаются, поэтому служба Pub / Sub больше не отправляет их вам). Например, если вы установите parallel-pull-count на 2 и executor-threads на 4, сообщения будут поступать через 2 потока, и 8 потоков будут заняты их обработкой. См. Параллельное управление для получения дополнительной информации.

spring.cloud.stream.bindings.<channelName>.consumer.concurrency

Вы правы, что этот параметр конфигурации предназначен только для определенных связывателей. Чтобы установить параллелизм в ваших группах потребителей, ваш производитель должен быть разделен. Однако привязка Spring Cloud Stream к Pub / Sub в настоящее время не поддерживает разбиение , поэтому вы не сможете установить параллелизм.

Я пытаюсь найти правильные параметры для настройки, чтобы определить, сколько сообщений можно обрабатывать параллельно в каждом экземпляре приложения.

Для достижения максимальной пропускной способности я будет работать с первыми двумя вариантами конфигурации, указанными выше, при этом также следует помнить, что сообщения, для обработки которых требуется больше времени, чем истекает срок их подтверждения, и служба Pub / Sub повторно доставит их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...