大量数据也不在话下,Spring Batch并行处理四种模式初探
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 多线程的Step
通过提供一个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
这个看起来跟第一个很像,其实完全不一样。它是多个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 远程分区
远程分区
跟远程分块
容易混淆,但其实它们是不同的。前面讲解的远程分块
是一个进程读,多个进程处理;而远程分区
是多个进程读,多个进程处理,多个进程写:
所以,远程分区
适用于容易有IO瓶颈的系统,因为它将读与写都拆到多个worker
进程中去了。远程分区
可以使用中间件,如消息队列,也可以不用。它通过PartitionHandler
来进行分区处理,而Partitioner
则定义了如何进行分区。
3 总结
本文介绍了Spring Batch
并行处理的四种模式,分别是多线程Step
、并行Steps
、远程分块、远程分区。前两种比较简单,给出代码例子;而后两种则复杂得多,特别是远程分区
模式,把IO
压力和业务处理压力都分解了,能大大提高整个流程的处理效率。后续我们再专门讲解一下远程分区
吧。
欢迎关注微信公众号<南瓜慢说>,将持续为你更新...
多读书,多分享;多写作,多整理。
大量数据也不在话下,Spring Batch并行处理四种模式初探的更多相关文章
- 框架-SPI四种模式+通用设备驱动实现
目录 前言 笔录草稿 SPI介绍 SPI四种模式 ** SPI 驱动框架 ** 框架 前言 SPI 介绍为搜集百度资料+个人理解 其余为原创(有误请指正) 集四种模式于一身 笔录草稿 SPI介绍 SP ...
- 【转】大数据批处理框架 Spring Batch全面解析
如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...
- 使用Spring Security3的四种方法概述
使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...
- 转:深入浅出spring IOC中四种依赖注入方式
转:https://blog.csdn.net/u010800201/article/details/72674420 深入浅出spring IOC中四种依赖注入方式 PS:前三种是我转载的,第四种是 ...
- 普通java类加入spring容器的四种方式
今天在自己开发的工具类中使用了spring注入的方式调用了其他类,但是发生的报错,在整理了后今天小结一下. 首先简单介绍下spring容器,spring容器是整个spring框架的核心,通常我们说的s ...
- 对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)
一. AES对称加密: AES加密 分组 二. 分组密码的填充 分组密码的填充 e.g.: PKCS#5填充方式 三. 流密码: 四. 分组密码加密中的四种模式: 3.1 ECB模式 优点: 1. ...
- Asp.net的sessionState四种模式配置方案
sessionState节点的配置 web.config关于sessionState节点的配置方案,sessionState有四种模式:off,inProc,StateServer,SqlServer ...
- OAuth2简易实战(一)-四种模式
1. OAuth2简易实战(一)-四种模式 1.1. 授权码授权模式(Authorization code Grant) 1.1.1. 流程图 1.1.2. 授权服务器配置 配置授权服务器中 clie ...
- LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)
参考文档:http://blog.csdn.net/ioy84737634/article/details/44916241 目录 lvs的调度算法 lvs的四种模式 四层均衡负载和七层的区别 1.l ...
随机推荐
- java.util.Scanner中hasNext()方法和next()方法的区别
先说结论: 两者均根据空格划分数据 两者在没有数据输入时均会等待输入 next()方法会将空格划分的数据依次输出,运行一次,输出一个 hasNext()方法会跟着next()方法移动,当前数据不为空, ...
- element-ui 格式化树形数组在table组件中展示(单元格合并)
最近做的项目涉及到很多单元格合并问题,element-ui组件对于单元格合并的处理虽然很灵活,但是需要事先计算好每个单元格合并的rowspan和colspan,直接在span-method属性中计算实 ...
- 最后之作-Last Order(bushi
最近化学学有机选修,讲羧酸的时候我想到一个问题:不考虑空间异构.能否稳定存在等问题,某高级饱和脂肪酸有多少种同分异构体?做为一名退役的OIer,我将它抽象为了另一个问题:含\(n\)个\(C\)的饱和 ...
- Linux学习笔记 一 第三章 Linux常用命令
第三章Linux常用命令 一.文件处理命令 1.命令格式 2.目录处理命令:ls 3.目录处理命令:mkdir 4.文件处理命令: touch
- low-code 与 20 年前的 Dreamweaver 有什么区别?
一.low-code 是什么? A low-code development platform (LCDP) is software that provides a development envir ...
- iNeuOS工业互联平台,WEB组态(iNeuView)集成rtmp和websocket视频元件,支持海康、大华等摄像头实时显示视频
目 录 1. 概述... 1 2. 平台演示... 2 3. 硬件摄像头... 2 4. 视频流协议转换管理... 2 5. 组态视频元件 ...
- JDK1.8源码学习-ArrayList
JDK1.8源码学习-ArrayList 目录 一.ArrayList简介 为了弥补普通数组无法自动扩容的不足,Java提供了集合类,其中ArrayList对数组进行了封装,使其可以自动的扩容或缩小长 ...
- JavaScript学习系列博客_28_JavaScript 数组去重
数组去重 var arr = [1,2,3,2,2,1,3,4,2,5]; //去除数组中重复的数字 //获取数组中的每一个元素 for(var i=0 ; i<arr.length ; i++ ...
- 团队作业4:第四篇Scrum冲刺博客(歪瑞古德小队)
目录 一.Daily Scrum Meeting 1.1 会议照片 1.2 项目进展 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3.2 Code Review 记录 3.3 issue ...
- 这可能是最详细的解析HTTP走私攻击的文章
前言 HTTP Desync Attacks也就是HTTP走私攻击,是我见到的比较有趣的一种攻击方式,这里来对这种漏洞进行介绍. TL;DR HTTP走私攻击利用了HTTP协议本身的问题:HTTP中存 ...