SpringBatch简介

news2024/9/25 7:24:39

参考:https://cloud.tencent.com/developer/article/1456757

  1. 简介

SpringBatch主要是一个轻量级的大数据量的并行处理(批处理)的框架。
作用和Hadoop很相似,不过Hadoop是基于重量级的分布式环境(处理巨量数据),而SpringBatch是基于轻量的应用框架(处理中小数据)。

1.2 批处理的核心场景

从某个位置读取大量的记录,位置可以是 数据库、文件或者外部推送队列(MQ)。
根据业务需要实时处理读取的数据。
将处理后的数据写入某个位置,可以第一条一样,可是数据库、文件或者推送到队列。

1.3 Spring Batch能解决的批处理场景

Spring Batch为批处理提供了一个轻量化的解决方案,它根据批处理的需要迭代处理各种记录,提供事物功能。
但是Spring Batch仅仅适用于"脱机"场景,在处理的过程中不能和外部进行任何交互,也不允许有任何输入。

1.3 Spring Batch的目标

开发人员仅关注业务逻辑,底层框架的交互交由Spring Batch去处理。
能够清晰分离业务与框架,框架已经限定了批处理的业务切入点,业务开发只需关注这些切入点(Read、Process、Write)。
提供开箱即用的通用接口。
快速轻松的融入Spring 框架,基于Spring Framework能够快速扩展各种功能。
所有现有核心服务都应易于更换或扩展,而不会对基础架构层产生任何影响。

1.4 Spring Batch结构

如下图,通常情况下一个独立的JVM程序就是仅仅用于处理批处理,而不要和其他功能重叠。 在最后一层基础设置(Infrastructure)部分主要分为3个部分。JobLauncher、Job以及Step。每一个Step又细分为ItemReader、ItemProcessor、ItemWirte。使用 Spring Batch主要就是知道每一个基础设置负责的内容,然后在对应的设施中实现对应的业务。

1.5 Spring Batch 批处理原则与建议

当构建批处理过程时,必须注意以下原则:

  1. 通常情况下,批处理的过程对系统和架构的设计要够要求比较高,因此尽可能使用通用架构来处理批量数据处理,降低问题发生的可能性。Spring Batch是一个是一个轻量级的框架,适用于处理一些灵活并没有到海量的数据。

  1. 批处理应该尽可能的简单,尽量避免在单个批处理中去执行过于复杂的任务。我们可以将任务分成多个批处理或者多个步骤去实现。

  1. 保证数据处理和物理数据紧密相连。笼统的说就是我们在处理数据的过程中有很多步骤,在某些步骤执行完时应该就写入数据,而不是等所有都处理完

  1. 尽可能减少系统资源的使用、尤其是耗费大量资源的IO以及跨服务器引用,尽量分配好数据处理的批量

  1. 定期分析系统的IO使用情况、SQL语句的执行情况等,尽可能的减少不必要的IO操作。优化的原则有:

  1. 尽量在一次事物中对同一数据进行读取或写缓存。

  1. 一次事物中,尽可能在开始就读取所有需要使用的数据。

  1. 优化索引,观察SQL的执行情况,尽量使用主键索引,尽量避免全表扫描或过多的索引扫描。

  1. SQL中的where尽可能通过主键查询。

  1. 不要在批处理中对相同的数据执行2次相同的操作

  1. 对于批处理程序而言应该在批处理启动之前就分配足够的内存,以免处理的过程中去重新申请新的内存页。

  1. 对数据的完整性应该从最差的角度来考虑,每一步的处理都应该建立完备的数据校验

  1. 对于数据的总量我们应该有一个和数据记录在数据结构的某个字段上

  1. 所有的批处理系统都需要进行压力测试

  1. 如果整个批处理的过程是基于文件系统,在处理的过程中请切记完成文件的备份以及文件内容的校验

1.6 批处理的通用策略

和软件开发的设计模式一样,批处理也有各种各样的现成模式可供参考。当一个开发(设计)人员开始执行批处理任务时,应该将业务逻辑拆分为一下的步骤或者板块分批执行:
  1. 数据转换:某个(某些)批处理的外部数据可能来自不同的外部系统或者外部提供者,这些数据的结构千差万别。在统一进行批量数据处理之前需要对这些数据进行转换,合并为一个统一的结构。因此在数据开始真正的执行业务处理之前,可以先搭建批处理任务将这些数据统一转换。

  1. 数据校验:批处理是对大量数据进行处理,并且数据的来源千差万别,所以批处理的输入数据需要对数据的完整性性进行校验(比如校验字段数据是否缺失)。另外批处理输出的数据也需要进行合适的校验(例如处理了100条数据,校验100条数据是否校验成功)

  1. 提取数据:批处理的工作是逐条从数据库或目标文件读取记录(records),提取时可以通过一些规则从数据源中进行数据筛选。

  1. 数据实时更新处理:根据业务要求,对实时数据进行处理。某些时候一行数据记录的处理需要绑定在一个事物之下。

  1. 输出记录到标准的文档格式:数据处理完成之后需要根据格式写入到对应的外部数据系统中。

以上五个步骤是一个标准的数据批处理过程,Spring batch框架为业务实现提供了以上几个功能入口。

  1. 概念

JobRepository
从字面上可以理解为"任务仓库",如果把一个批处理比作一个任务的话,这个仓库存储了很多这种任务。JobRepository 会将任务包括其状态等数据持久化,存储到许多数据库中。Spring Batch 默认会提供一个 SimpleJobRepository 仓库,方便我们开启批处理。
Job
“任务”。每个批处理都是一个任务,除了任务本身之外,任务也存在成功和失败等等状态,所以可以引出两个概念 JobInstance 与 JobExecution 。job 是一个接口,JobInstance 是其实现,代表了“任务”本身,提供了 getJobName、getInstanceId 等方法供我们获取任务本身的一些属性。JobExecution 代表任务的状态,如创建时间、结束时间、结束状态、抛出的异常等等。
Step
“步骤”。批处理任务肯定有非常多的步骤,如一个最基本的数据库同步,从 A 数据库读取数据,存入到 B 数据库中,这里就分为了两个步骤。在 Spring Batch 中,一个任务可以有很多个步骤,每个步骤大致分为三步:读、处理、写,其对应的类分别就是 Item Reader,Item Processor,Item Writer。
JobLauncher
“任务装置”。如火箭发射装置就是用来操作火箭发射的,这里的任务装置就是用来执行任务的。

Spring Batch批处理的核心概念

如图所示,在一个标准的批处理任务中组要涵盖的核心概念有JobLauncher、Job、Step,一个Job可以涵盖多个Step,一个Job对应一个启动的JobLauncher。一个Step中分为ItemReader、ItemProcessor、ItemWriter,根据字面意思它们分别对应数据提取、数据处理和数据写入。此外JobLauncher、Job、Step也称之为批处理的元数据(Metadata),它们会被存储到JobRepository中。
  1. SpringBatch结构

  1. Spring Batch运行的基本单位是一个Job,一个Job就做一件批处理的事情。

  1. 一个Job 通常由一个或多个Step组成(基本就像是一个工作流);step就是每个job要执行的单个步骤。

  1. 一个Step通常由三部分组成(读入数据 ItemReader,处理数据 ItemProcessor,写入数据 ItemWriter)

  1. Step里面,会有TaskletTasklet是一个任务单元,根据 Spring Batch 的设计,在一个 Step 中只能执行一个 Tasklet, 如果要按照顺序执行多个 Tasklet ,我们需要设置不同的 Step。

  1. chunk:数据块,构造器入参指定了数据块的大小, 如指定为2时表示 每当读取2组数据后, 做一次数据输出处理,Chunk里面就是不断循环的一个流程,读数据,处理数据,然后写数据, Spring Batch会不断的循环 这个流程,直到批处理数据完成。

  1. 数据处理注意事项

4.1 数据额外处理

某些情况需要实现对数据进行额外处理,在进入批处理之前通过其他方式将数据进行处理。主要内容有:

  1. 排序:由于批处理是以独立的行数据(record)进行处理的,在处理的时候并不知道记录前后关系。因此如果需要对整体数据进行排序,最好事先使用其他方式完成。

  1. 分割:数据拆分也建议使用独立的任务来完成。理由类似排序,因为批处理的过程都是以行记录为基本处理单位的,无法再对分割之后的数据进行扩展处理。

  1. 合并:理由如上。

4.2 常规数据源

批处理的数据源通常包括:

  1. 数据库驱动链接(链接到数据库)对数据进行逐条提取。

  1. 文件驱动链接,对文件数据进行提取

  1. 消息驱动链接,从MQ、kafka等消息系统提取数据。

4.3 典型的处理过程

  1. 在业务停止的窗口期进行批数据处理,例如银行对账、清结算都是在12点日切到黎明之间。简称为离线处理。

  1. 在线或并发批处理,但是需要对实际业务或用户的响应进行考量。

  1. 并行处理多种不同的批处理作业。

  1. 分区处理:将相同的数据分为不同的区块,然后按照相同的步骤分为许多独立的批处理任务对不同的区块进行处理。

  1. 以上处理过程进行组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac安装vue脚手架失败及解决方法

大家好,这里是 一口八宝周 👏欢迎来到我的博客 ❤️一起交流学习文章中有需要改进的地方请大佬们多多指点 谢谢 🙏最近想学前端的心又开始躁动了,于是说干就干,先搞个vue脚手架谁知道上来就失败了说说我的步骤吧&#…

2017年MathorCup数学建模A题流程工业的智能制造解题全过程文档及程序

2017年第七届MathorCup高校数学建模挑战赛 A题 流程工业的智能制造 原题再现: “中国制造 2025”是我国制造业升级的国家大战略。其技术核心是智能制造,智能化程度相当于“德国工业 4.0”水平。“中国制造 2025”的重点领域既包含重大装备的制造业&…

mybatis小demo讲解(详细demo版)

这篇是mybatis的demo演示版噢,如果要了解理论的可以参考这篇哈mybatis从入门到精通好了,我们开始咯 MyBatis小demo1.简单的mybatis小案例1. 创建项目、准备环境2. mybatis的两种实现方式2.1 映射文件Mapper.xml实现1.简单的mybatis小案例 1. 创建项目、…

ESP8266与手机App通信(STM32)

认识模块 ESP8266是一种低成本的Wi-Fi模块,可用于连接物联网设备,控制器和传感器等。它具有小巧、高度集成和低功耗的特点,因此在物联网应用中被广泛使用。ESP8266模块由Espressif Systems开发,具有单芯片的封装和多种功能&#x…

Linux--磁盘存储管理 分区工具 fdisk 了解

对于磁盘存储,既然要管理,要分区,那必然就少不了要 分区的工具对于分区工具,常用的有三个,fdisk 、gdisk、parted ~!!本次,先介绍下 fdisk 分区工具 在介绍 fdisk 工具之前&#xff…

【UE4 RTS游戏】05-自定义日期和时间

效果步骤打开项目设置,重新设置玩家状态类为“MyGameState”打开“MyGameState”,点击类设置,选中父类为“GameStateBase”接着创建一些变量:(1)“TimeUnit”,浮点型,私有&#xff0…

线程同步——管程

管程是允许线程具有互斥、等待(堵塞)某个条件为false的能力的同步结构。具有通知其他线程他们特定条件已经满足的机制。管程为线程提供了可以暂时放弃独占访问,以便在重新获得独占访问并恢复任务之前等待满足某些条件。 管程有互斥锁以及特定…

趣味三角——第15章——傅里叶定理

第15章 傅里叶定理(Fourier’s Theorem) Fourier, not being noble, could not enter the artillery, although he was a second Newton. (傅立叶出生并不高贵,因此按当时的惯例进不了炮兵部队,虽然他是第二个牛顿。) —Franois Jean Dominique Arag…

Mini Pupper在ROS中的仿真

Mini Pupper在ROS中的仿真 课程概述 在这个课程中,你将会学习Mini Pupper结合Rivz和Gazebo的实例应用。你将使用Rviz可视化机器人模型,并在Gazebo仿真环境中实现Mini Pupper的键盘移动控制,然后带着Mini Pupper在你搭建的虚拟世界中散步。 关…

dorcker与vlu靶场搭建

dorcker与vlu靶场搭建 dorcker安装 以kali linux 为例 安装必要的一些系统工具 apt update apt -y install apt-transport-https ca-certificates curl software-properties-common 添加Docker PGP key curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg …

【JavaSE】数组的定义与使用详解

目录 1.数组的基本概念 1.1数组的好处 1.2什么是数组 1.3数组的定义及初始化 1.3.1数组的创建 1.3.2数组的初始化 1.4数组的使用 1.4.1访问数组中的元素 1.4.2遍历数组 2.数组的类型 2.1认识JVM的内存分布 2.2基本类型变量与引用类型变量 2.3认识null 3.数组的应…

(蓝桥真题)分果果(动态规划)

题目链接:P8746 [蓝桥杯 2021 省 A] 分果果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例1输入: 5 2 6 1 2 7 9 样例1输出: 0 样例2输入: 5 5 6 1 2 7 9 样例2输出: 2 分析:这道题的状态表…

第十二章 opengl之模型加载(Assimp)

OpenGLAssimp模型加载库构建Assimp网格网格渲染Assimp 我们不太能够对像是房子、汽车或者人形角色这样的复杂形状手工定义所有的顶点、法线和纹理坐标。我们要的是将这些模型(Model)导入(Import)到程序当中。模型通常都由3D艺术家在Blender、3DS Max或者Maya这样的工具中精心制…

备份时间缩短为原来 1/4,西安交大云数据中心的软件定义存储实践

XEDP 统一数据平台为西安交通大学云平台业务提供可靠的备份空间和强大的容灾能力,同时确保数据安全。西安交通大学(简称“西安交大”)是我国最早兴办、享誉海内外的著名高等学府,是教育部直属重点大学。学校现有兴庆、雁塔、曲江和…

strace 用法介绍

strace 是什么 strace 是一个可用于诊断和调试的 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。 strace 作为一种动态跟踪工具,能够帮助我们高效地定位进程和服务故障。它像是一个侦探&…

企业电子招投标采购系统源码之系统的首页设计

​​ 功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为…

ThreadLocal解析

ThreadLocal是一个存储线程本地变量的对象,在ThreadLocal中存储的对象在其他线程中是不可见的,本文介绍ThreadLocal的原理。 1、threadLocal使用 有如下代码: Slf4j public class TestThreadLocal {public static void main(String[] args…

干货!设备管理包括哪些内容?

本文将为您介绍:1、设备管理的内容有哪些2、好用的设备管理软件; 设备管理在企业管理中非常重要:设备是企业安全生产的前提,没有安全生产,一切工作都可能是无用功; 而好的设备管理可以极大地提高生产效率…

【数据库】MySQL数据库约束(六大约束)

目录 1.数据库约束 1.1约束类型 1.2 非空约束(NOT NULL ) 1.3 唯一约束(UNIQUE) 1.4默认值约束(DEFAULT ) 1.5主键约束(PRIMARY KEY) 1.6外键约束(FOREIGN KEY &…

安全漏洞修复帖

对于项目漏洞都是一堆又不重要又很重要的事情一、修复HTTP 响应头缺失NginxTomcat响应头:值二、会话 Cookie 中缺少 secure 属性三、Html form 表单没有 CSRF 防护Security的示例Shiro的示例四、Host 头攻击NginxTomcatApache五、开启 options 方法一、修复HTTP 响应…