SpringBatch简述

前言

​ 如今微服务架构应用增多,但在企业里还存在海量数据的批处理场景。诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理。而常见处理方案有:

1、数据脚本跑批

2、批处理框架

3、多线程事务处理方案。

​ 在满足基本功能之外,还需要关注如下的几点:

  • **健壮性:**不会因为无效数据或错误数据导致程序崩溃;
  • **可靠性:**通过跟踪、监控、日志及相关的处理策略(重试、跳过、重启)实现批作业的可靠执行;
  • **扩展性:**通过并发或者并行技术实现应用的纵向和横向扩展,满足海量数据处理的性能需求;

介绍

Spring Batch是一个轻量级的批量处理框架,它基于Spring框架,提供了一套完整的批量处理解决方案。Spring Batch可以帮助我们处理大量的数据,支持事务管理、并发处理、错误处理等功能。

Spring Batch本身是批处理逻辑的抽象,是对执行任务的规范化,跟调度框架是两回事。它可以结合调度框架,由调度框架进行调度Spring Batch作业,完成对批处理的任务。调度框架有相应的开源软件可供选择,如quartzcronxxl-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把批处理简化为JobJob 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查询方式,对于非开发人员太不友好;

​ 但在企业级应用中面对批量数据处理,仅仅提供批处理框架仅能满足批处理作业的快速开发、执行能力。企业需要统一的批处理平台来处理复杂的企业批处理应用,批处理平台需要解决作业的统一调度、批处理作业的集中管理和管控、批处理作业的统一监控等能力。

总结

​ 整理来说,是一个很不错的批处理框架,但是使用成本高,运维成本高。

相关推荐
阿伟*rui1 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel
XiaoLeisj3 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck3 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei3 小时前
java的类加载机制的学习
java·学习
Yaml45 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~5 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616885 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7896 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java6 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~6 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust