前言
如今微服务架构应用增多,但在企业里还存在海量数据的批处理场景。诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理。而常见处理方案有:
1、数据脚本跑批
2、批处理框架
3、多线程事务处理方案。
在满足基本功能之外,还需要关注如下的几点:
- **健壮性:**不会因为无效数据或错误数据导致程序崩溃;
- **可靠性:**通过跟踪、监控、日志及相关的处理策略(重试、跳过、重启)实现批作业的可靠执行;
- **扩展性:**通过并发或者并行技术实现应用的纵向和横向扩展,满足海量数据处理的性能需求;
介绍
Spring Batch是一个轻量级的批量处理框架,它基于Spring框架,提供了一套完整的批量处理解决方案。Spring Batch可以帮助我们处理大量的数据,支持事务管理、并发处理、错误处理等功能。
Spring Batch
本身是批处理逻辑的抽象,是对执行任务的规范化,跟调度框架是两回事。它可以结合调度框架,由调度框架进行调度Spring Batch
作业,完成对批处理的任务。调度框架有相应的开源软件可供选择,如quartz
,cron
,xxl-job
等。
优势
- 丰富的开箱即用组件。 开箱即用组件包括各种资源的读、写。读/写:支持文本文件读/写、XML文件读/写、数据库读/写、JMS队列读/写等。还提供作业仓库,作业调度器等基础设施,大大简化开发复杂度。
- 面向chunk处理 支持多次读、一次写、避免多次对资源的写入,大幅提升批处理效率。
- 事务管理能力。 默认采用Spring提供的声明式事务管理模型,面向Chunk的操作支持事务管理,同时支持为每个tasklet操作设置细粒度的事务配置:隔离级别、传播行为、超时设置等。
- 元数据管理。 自动记录Job和Step的执行情况、包括成功、失败、失败的异常信息、执行次数、重试次数、跳过次数、执行时间等,方便后期的维护和查看。
- 易监控的批处理应用。 提供了灵活的监控模式,包括直接查看数据库、通过
Spring Batch
提供的API查看、JMX控制台查看等。其中还说到Spring Batch Admin
,不过这个项目已不维护,改为用Spring Cloud Data Flow
了。 - 丰富的流程定义。 支持顺序任务、条件分支任务、基于这两种任务可以组织复杂的任务流程。
- 健壮的批处理应用。 支持作业的跳过、重试、重启能力、避免因错误导致批处理作业的异常中断。
- 易扩展的批处理应用。 扩展机制包括多线程执行一个Step(Multithreaded step)、多线程并行执行多个Step(Parallelizing step)、远程执行作业(Remote chunking)、分区执行(partitioning step)。
- 复用企业现有IT资产。 提供多种
Adapter
能力,使得企业现有的服务可以方便集成到批处理应用中。避免重新开发、达到复用企业遗留的服务资产。
典型场景
- 定期提交批处理任务
- 并行批处理
- 企业消息驱动处理
- 大规模并行批处理
- 失败后手动或定时重启
- 按顺序处理依赖的任务(可扩展为工作流驱动的批处理)
- 部分处理:跳过记录(例如,回滚时)
- 批处理事务
核心概念
Spring Batch
把批处理简单化,标准化是如何体现出来。简单来说,Spring Batch
把批处理简化为Job
和Job step
两部分,在Job step
中,把数据处理分为读数据(Reader)、处理数据(Processor)、写数据(Writer)三个步骤。异常处理机制分为跳过、重试、重启三种,作业方式分为多线程、并行、远程、分区四种。开发者在开发过程中,大部分工作是根据业务要求编写Reader、Processor和Writer即可,提高了批处理开发的效率。同时Spring Batch
本身也提供了很多默认的Reader和Writer,开箱即用。
1、Job
Job是Spring Batch中的最高级别的概念,它代表了一个完整的批量处理任务。一个Job由多个Step组成,每个Step代表了一个具体的处理步骤。
2、Step
Step是Spring Batch中的一个处理步骤,它包含了一个ItemReader读取数据、一个ItemProcessor处理数据和一个ItemWriter写入数据。
1)ItemReader
ItemReader用于读取数据,它可以从文件、数据库、消息队列等数据源中读取数据,并将读取到的数据传递给ItemProcessor进行处理。
2)ItemProcessor
ItemProcessor用于处理数据,它可以对读取到的数据进行处理,并将处理后的数据传递给ItemWriter进行写入。
3)ItemWriter
ItemWriter用于写入数据,它可以将处理后的数据写入到文件、数据库、消息队列等数据源中。
不足与增强
Spring Batch批处理框架虽然提供了4种不同的监控方式,但从目前的使用情况来看,都不是非常的友好。
- 通过DB直接查看,对于管理人员来讲,真的不忍直视;
- 通过API实现自定义的查询,这是程序员的天堂,确实运维人员的地狱;
- 提供了Web控制台,进行Job的监控和操作,目前提供的功能太裸露,无法直接用于生产;
- 提供JMX查询方式,对于非开发人员太不友好;
但在企业级应用中面对批量数据处理,仅仅提供批处理框架仅能满足批处理作业的快速开发、执行能力。企业需要统一的批处理平台来处理复杂的企业批处理应用,批处理平台需要解决作业的统一调度、批处理作业的集中管理和管控、批处理作业的统一监控等能力。
总结
整理来说,是一个很不错的批处理框架,但是使用成本高,运维成本高。