Большой объем данных не проблема, предварительное изучение четырех режимов параллельной обработки Spring Batch

Spring Boot

1. Введение

Добро пожаловать в гостиТыквенный медленный разговор www.pkslow.comПолучайте больше отличных статей!

Spring相关文章:Springboot-Cloud

Я написал статью ранееОбъясните введение Spring Batch на примерах, отличной среде пакетной обработки."объяснятьSpring BatchПриступая к работе, но чтобы играть свою роль, параллельная обработка должна быть понята.

2 Четыре режима

В большинстве случаев однопоточный, однопроцессныйSpring BatchУдалось удовлетворить ваши потребности. Прежде чем мы перейдем к более сложным функциям, давайте посмотрим, работают ли простые,Keep it Simple and Stupid.

Однако, когда вы решите использовать параллельную обработку,Spring BatchТакже доступны различные варианты. Обычно делится на две категории:

  • (1) Однопроцессный, многопоточный
  • (2) Мультипроцесс

Разбивка выглядит следующим образом:

  • (1) МногопоточныйStep(один процесс)
  • (2) параллельноSteps(один процесс)
  • (3) Удаленный блок (многопроцессный)
  • (4) Удаленный раздел (многопроцессный)

Из одного только названия сложно понять разницу между ними, давайте представим их по порядку.

2.1 Многопоточный шаг

предоставляяTaskExecutorвыполнить, иTaskExecutorЕго можно настроить, мы можем предоставить пул потоков на основеTaskExecutor, вы можете добиться многопоточной обработки.

@Bean
public TaskExecutor taskExecutor(){
  return new SimpleAsyncTaskExecutor("spring_batch");
}

@Bean
public Step sampleStep(TaskExecutor taskExecutor) {
  return this.stepBuilderFactory.get("sampleStep")
    .<String, String>chunk(10)
    .reader(itemReader())
    .writer(itemWriter())
    .taskExecutor(taskExecutor)
    .build();
}

2.2 Параллельные шаги

Этот очень похож на первый, но на самом деле совершенно другой. это несколькоstepsобрабатываться параллельно. такjobследует разложить на независимыеstep, а не в пошаговой последовательности, чтобы его можно было выполнять параллельно. Например, следующий пример,step1а такжеstep2сливаться в одинflow1,а такжеstep3дляflow2,flow1а такжеflow2можно обрабатывать параллельно.

код показывает, как показано ниже:

@Bean
public Job job() {
  return jobBuilderFactory.get("job")
    .start(splitFlow())
    .next(step4())
    .build()        //builds FlowJobBuilder instance
    .build();       //builds Job instance
}

@Bean
public Flow splitFlow() {
  return new FlowBuilder<SimpleFlow>("splitFlow")
    .split(taskExecutor())
    .add(flow1(), flow2())
    .build();
}

@Bean
public Flow flow1() {
  return new FlowBuilder<SimpleFlow>("flow1")
    .start(step1())
    .next(step2())
    .build();
}

@Bean
public Flow flow2() {
  return new FlowBuilder<SimpleFlow>("flow2")
    .start(step3())
    .build();
}

@Bean
public TaskExecutor taskExecutor(){
  return new SimpleAsyncTaskExecutor("spring_batch");
}

2.3 Удаленная блокировка

В этом режимеstepбудет разбит на несколькоJavaПроцесс обрабатывается, и основная программа и программа выполнения блока взаимодействуют через промежуточное программное обеспечение. Как показано ниже:

Как видно из рисунка выше, есть только один процесс чтенияManager, а процессWorkerИх может быть больше одного, поэтому он подходит для сценариев, которые легко читать, но трудно обрабатывать.

2.4 Удаленный раздел

远程分区а также远程分块Их легко спутать, но на самом деле они разные. ранее объяснил远程分块читается одним процессом, обрабатывается несколькими процессами; и远程分区Он читается несколькими процессами, обрабатывается несколькими процессами и записывается несколькими процессами:

так,远程分区Подходит для систем, подверженных узким местам ввода-вывода, поскольку разделяет операции чтения и записи на несколькоworkerв процессе.远程分区Программное обеспечение промежуточного слоя, такое как очереди сообщений, может использоваться или не использоваться. это проходитPartitionHandlerдля обработки разделов иPartitionerопределяет, как разделить.

3 Резюме

В этой статье описываетсяSpring BatchЧетыре режима параллельной обработки:多线程Step,параллельноSteps, удаленный блок, удаленный раздел. Первые два относительно просты и содержат примеры кода; последние два гораздо сложнее, особенно远程分区режим, поставитьIOДавление и давление деловой обработки разлагаются, что может значительно повысить эффективность обработки всего процесса. Позже мы специально объясним远程分区Бар.


Добро пожаловать в публичный аккаунт WeChatТыква медленный разговор>, буду обновлять для вас...

Читайте больше, делитесь больше, пишите больше, организуйте больше.