Поток данных Spring Cloud: асинхронное развертывание

Я использовал этот пример для создания простого приложения, которое использует Spring Batch (удаленное разделение) и поток данных Spring Cloud для развертывания рабочих модулей в Kubernetes.

Глядя на журналы модуля "partitionedJob", созданного в Kubernetes, я вижу, что рабочие шаги (модули) запускаются последовательно. Время, необходимое для запуска одного рабочего модуля, составляет примерно 10-15 секунд. В результате рабочие поды запускаются с перерывом в 10-15 секунд один за другим.

Создание 40 подов в Kubernetes занимает примерно 7-8 минут . Было бы идеально, если бы все сегментированные шаги (рабочие поды) запускались асинхронно за один раз. Это улучшит время непрерывного выполнения пакетного приложения, поскольку рабочие модули будут запускаться пакетно, а не последовательно один за другим .

Вопрос : Как мы можем настроить Spring Cloud Data Flow / Spring Batch для запуска рабочих модулей (разделенных шагов) асинхронно / параллельно, а не последовательно?

2 ответа

Решение

Как упоминал в комментариях, Mahmoud Ben Hassine запускаются последовательно :

      private void launchWorkers(Set<StepExecution> candidates,
            Set<StepExecution> executed) {
        for (StepExecution execution : candidates) {
            if (this.currentWorkers < this.maxWorkers || this.maxWorkers < 0) {
                launchWorker(execution);
                this.currentWorkers++;

                executed.add(execution);
            }
        }
    }

Как Glenn Renfro упомянул в комментариях, проблема была создана для того же самого. Этот ответ будет обновлен, если доступно решение для асинхронного запуска воркеров.

В примере в демонстрационных целях максимальное количество рабочих здесь равно 2 . Таким образом, для ваших 40 разделов только два воркера будут запущены параллельно, что наводит на мысль, что разделы обрабатываются последовательно.

Вам необходимо обновить образец (или сделать его настраиваемым) и при необходимости увеличить количество одновременно работающих рабочих процессов.