第 11 章:批处理和任务

本章系统梳理了云原生环境下的批处理、任务调度、Spring Batch、Spring Cloud Task 及工作流引擎的核心模式与实践,帮助开发者构建高效、可扩展的数据处理与自动化任务系统。

批处理和任务的云原生挑战

云环境带来弹性和规模优势,使批处理和任务型工作负载能够高效并行化。批处理适合处理大数据集、顺序数据和窗口化场景,支持分块(chunk)处理,提升资源利用率和吞吐量。对于串行或部分并行的任务,云平台同样能提供弹性扩展能力。

Spring Batch 概述

Spring Batch 是 JVM 领域的标准批处理框架,支持日志、事务、作业重启、跳过与重试等能力。核心概念包括 Job、Step、ItemReader、ItemProcessor、ItemWriter。每个 Job 可包含多个 Step,Step 可串行或并发执行,支持条件、循环、分支等控制流。

图 11-1 Spring Batch 作业的域模型
图 11-1 Spring Batch 作业的域模型

Spring Batch 作业结构与示例

典型批处理作业包含清理、数据导入、数据分析等步骤。每个 Step 可配置 Tasklet(通用回调)或基于 ItemReader/Processor/Writer 的分块处理。

@Configuration
class BatchConfiguration {
    @Bean
    Job etl(JobBuilderFactory jbf, StepBuilderFactory sbf, Step1Configuration step1, Step2Configuration step2, Step3Configuration step3) {
        Step setup = sbf.get("clean-contact-table").tasklet(step1.tasklet(null)).build();
        Step s2 = sbf.get("file-db")
            .<Person, Person>chunk(1000)
            .faultTolerant()
            .skip(InvalidEmailException.class)
            .retry(HttpStatusCodeException.class)
            .retryLimit(2)
            .reader(step2.fileReader(null))
            .processor(step2.emailValidatingProcessor(null))
            .writer(step2.jdbcWriter(null))
            .build();
        Step s3 = sbf.get("db-file")
            .<Map<Integer, Integer>, Map<Integer, Integer>>chunk(100)
            .reader(step3.jdbcReader(null))
            .writer(step3.fileWriter(null))
            .build();
        return jbf.get("etl").incrementer(new RunIdIncrementer())
            .start(setup)
            .next(s2)
            .next(s3)
            .build();
    }
}
  • 支持跳过与重试策略,提升容错性
  • 支持参数化与元数据表,便于作业重启与监控

典型批处理步骤与配置

  • Tasklet 步骤:如清理表数据
  • ItemReader/Processor/Writer 步骤:如从 CSV 文件读取、校验、写入数据库
  • 分析步骤:如统计分析后写入输出文件

代码示例可用伪代码或文字描述,避免冗长。

批处理作业调度与并发

  • 支持通过 TaskExecutor 并发处理
  • 支持通过 @Scheduled、Quartz、分布式锁等方式调度作业
  • 需关注作业幂等性与分布式一致性

远程分区与分块

Spring Batch 支持远程分区(remote partitioning)和远程分块(remote chunking):

  • 远程分区:Leader 节点分配数据区间,Worker 节点独立读取/处理/写入
  • 远程分块:Leader 读取数据,Worker 处理,Leader 汇总写入

通过消息中间件(如 RabbitMQ、Kafka)实现节点间通信,提升弹性与扩展性。

Spring Cloud Task 简介

Spring Cloud Task 提供任务生命周期管理,适合一次性、短暂或长时间运行的进程。支持参数化、状态跟踪、与 Spring Batch 集成。典型用法:

@EnableTask
@SpringBootApplication
public class HelloTask {
    @Bean
    CommandLineRunner runAndExplore(TaskExplorer taskExplorer) {
        return args -> {
            // 任务逻辑
            // 查询任务执行状态
        };
    }
}

工作流引擎与业务流程自动化

工作流系统(如 Activiti、Flowable)适合建模复杂业务流程,支持自动与人工任务、状态机、流程变量、补偿机制等。BPMN 2.0 标准广泛应用于流程建模。

图 11-2 BPMN 2.0 注册流程示例
图 11-2 BPMN 2.0 注册流程示例
  • 支持流程定义、实例化、任务分配、状态查询
  • 可与 Spring Boot 自动集成,支持 REST API 驱动流程

分布式批处理与工作流的云原生实践

  • 通过消息中间件实现批处理作业和工作流的分布式调度
  • 支持 Leader/Worker 模式,弹性扩展处理能力
  • 支持流程暂停、恢复、补偿,提升业务可靠性

总结

本章系统梳理了云原生环境下的批处理、任务调度、Spring Batch、Spring Cloud Task 及工作流引擎的核心模式与实践。通过合理设计批处理与任务系统,结合消息中间件和工作流引擎,开发者可实现高效、弹性、可观测的数据处理与自动化任务能力,支撑复杂业务场景与大规模数据处理需求。

文章导航

独立页面

这是书籍中的独立页面。

书籍首页

评论区