Подсчет экземпляров потока данных Spring Cloud - PullRequest
0 голосов
/ 21 сентября 2018

Когда можно использовать эти свойства?spring.cloud.stream.instanceCount, spring.cloud.stream.instanceindex

Рассмотрим этот конвейер, rabbitsrc -> filter-> transform-> httpclient-> rabbit sink

Необходимо опубликовать 360 000 сообщений, в настоящее время занимает 22 мин.

Настройки 1) предварительная выборка на rabbit src установлена ​​на 50. 2) httpclient используется для отправки сообщения на локальную конечную точку покоя, открытую одним запущенным экземпляром микросервиса весенней загрузки.

Проблема: кажется узким местом между httpclient -> кроличьей приемной частью конвейера, так как я вижу пропускную способность 250 / с входящего сообщения в очереди приемника кролика.Более ранняя часть конвейера кажется очень быстрой.Передача сообщений от http-клиента кролику занимает много времени.Поэтому в идеале нужно разделить нагрузку от шага преобразования между несколькими экземплярами микросервисов с пружинной загрузкой.Таким образом, мы могли бы получить 500 / с сообщений в очередь кроликов назначения.

Однако не знаю, где вносить изменения конфигурации в конвейер, то есть, какое приложение мне нужно, чтобы увеличить количество экземпляров, где установитьиндекс экземпляра и т. д.

1 Ответ

0 голосов
/ 01 октября 2018

Подробнее о instanceCount и instanceIndex можно прочитать в справочном руководстве SCSt .

. Здесь приведена демонстрация использования этих свойств.

Если вас не интересует сценарий многораздельной потоковой передачи и вы заинтересованы только в распараллеливании «вычисления», вы просто масштабируете количество экземпляров.

В отличие от реализаций, специфичных для облачной среды выполнения, в Local-сервере SCDF, однако, отсутствует поддержка масштабирования «среды выполнения», но вы можете развернуть поток с количеством экземпляров, зависящих от приложения.

Например, в приведенном выше примере мы развертываем поток с именем foo с deployer.appender.count=3.SCDF развернет 3 экземпляра приложения appender, и по умолчанию все экземпляры будут конкурировать за сообщения.Следовательно, они будут в автоматическом состоянии с балансировкой нагрузки для распараллеливания вычислительных операций.

Все это говорит о том, что, просто масштабируя пользовательские экземпляры, вы все равно не сможете достичь желаемой пропускной способности.Возможно, вам придется настроить предварительную выборку, параллелизм и другие пользовательские конфигурации Rabbit, чтобы максимизировать их для своей среды.В качестве альтернативы вы можете использовать инструмент тестирования производительности Rabbit , чтобы измерить его сырую пропускную способность и сравнить его с бизнес-логикой, встроенной в рабочую нагрузку SCSt / SCDF.

ОБНОВЛЕНИЕ

Кроме того, когда вы используете SCDF с Skipper, у вас будет видимость всей автоматизации переопределений свойств потоковой передачи, предоставленных SCDF.

Вот пример вывода для appender приложения.

dataflow:>stream manifest --name foo

"apiVersion": "skipper.spring.io/v1"
"kind": "SpringCloudDeployerApplication"
"metadata":
  "name": "appender"
"spec":
  "resource": "https://github.com/sabbyanandan/partitions/raw/master/jars/appender"
  "resourceMetadata": "https://github.com/sabbyanandan/partitions/raw/master/jars/appender:jar:metadata:0.0.1-SNAPSHOT"
  "version": "0.0.1-SNAPSHOT"
  "applicationProperties":
    "spring.metrics.export.triggers.application.includes": "integration**"
    "spring.cloud.dataflow.stream.app.label": "appender"
    "spring.cloud.stream.instanceCount": "3"
    "spring.cloud.stream.metrics.key": "foo.appender.${spring.cloud.application.guid}"
    "spring.cloud.stream.bindings.input.group": "foo"
    "spring.cloud.stream.metrics.properties": "spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*"
    "spring.cloud.stream.bindings.output.producer.requiredGroups": "foo"
    "spring.cloud.dataflow.stream.name": "foo"
    "spring.cloud.stream.bindings.output.destination": "foo.appender"
    "spring.cloud.dataflow.stream.app.type": "processor"
    "spring.cloud.stream.bindings.input.consumer.partitioned": "true"
    "spring.cloud.stream.bindings.input.destination": "foo.fruits"
  "deploymentProperties":
    "spring.cloud.deployer.indexed": "true"
    "spring.cloud.deployer.count": "3"
    "spring.cloud.deployer.group": "foo"
...