Поток данных 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 разделов только два воркера будут запущены параллельно, что наводит на мысль, что разделы обрабатываются последовательно.
Вам необходимо обновить образец (или сделать его настраиваемым) и при необходимости увеличить количество одновременно работающих рабочих процессов.