「」一文搞懂大数据批量处理框架Spring Batch的完美解析方案是什么( 五 )


文章图片

文章图片

需要注意的是Spring Batch框架提供的大部分的ItemReader、ItemWriter等操作都是线程不安全的 。
可以通过扩展的方式显现线程安全的Step 。
下面为大家展示一个扩展的实现:
【「」一文搞懂大数据批量处理框架Spring Batch的完美解析方案是什么】「」一文搞懂大数据批量处理框架Spring Batch的完美解析方案是什么
文章图片

文章图片

需求:针对数据表的批量处理 , 实现线程安全的Step , 并且支持重启能力 , 即在执行失败点可以记录批处理的状态 。
对于示例中的数据库读取组件JdbcCursorItemReader , 在设计数据库表时 , 在表中增加一个字段Flag , 用于标识当前的记录是否已经读取并处理成功 , 如果处理成功则标识Flag=true , 等下次重新读取的时候 , 对于已经成功读取且处理成功的记录直接跳过处理 。
Multithreaded Step(多线程步)提供了多个线程执行一个Step的能力 , 但这种场景在实际的业务中使用的并不是非常多 。
更多的业务场景是Job中不同的Step没有明确的先后顺序 , 可以在执行期并行的执行 。
Parallel Step:提供单个节点横向扩展的能力
「」一文搞懂大数据批量处理框架Spring Batch的完美解析方案是什么
文章图片

文章图片

使用场景:Step A、Step B两个作业步由不同的线程执行 , 两者均执行完毕后 , Step C才会被执行 。
框架提供了并行Step的能力 。可以通过Split元素来定义并行的作业流 , 并制定使用的线程池 。
Parallel Step模式的执行效果如下:
「」一文搞懂大数据批量处理框架Spring Batch的完美解析方案是什么
文章图片

文章图片

每个作业步并行处理不同的记录 , 示例中三个作业步 , 处理同一张表中的不同数据 。
并行Step提供了在一个节点上横向处理 , 但随着作业处理量的增加 , 有可能一台节点无法满足Job的处理 , 此时我们可以采用远程Step的方式将多个机器节点组合起来完成一个Job的处理 。
Remote Chunking:远程Step技术本质上是将对Item读、写的处理逻辑进行分离;通常情况下读的逻辑放在一个节点进行操作 , 将写操作分发到另外的节点执行 。
「」一文搞懂大数据批量处理框架Spring Batch的完美解析方案是什么
文章图片

文章图片

远程分块是一个把step进行技术分割的工作 , 不需要对处理数据的结构有明确了解 。
任何输入源能够使用单进程读取并在动态分割后作为"块"发送给远程的工作进程 。
远程进程实现了监听者模式 , 反馈请求、处理数据最终将处理结果异步返回 。请求和返回之间的传输会被确保在发送者和单个消费者之间 。
在Master节点 , 作业步负责读取数据 , 并将读取的数据通过远程技术发送到指定的远端节点上 , 进行处理 , 处理完毕后Master负责回收Remote端执行的情况 。
在Spring Batch框架中通过两个核心的接口来完成远程Step的任务 , 分别是ChunkProvider与ChunkProcessor 。
ChunkProvider:根据给定的ItemReader操作产生批量的Chunk操作;
ChunkProcessor:负责获取ChunkProvider产生的Chunk操作 , 执行具体的写逻辑;
Spring Batch中对远程Step没有默认的实现 , 但我们可以借助SI或者AMQP实现来实现远程通讯能力 。
Step本地节点负责读取数据 , 并通过MessagingGateway将请求发送到远程Step上;远程Step提供了队列的监听器 , 当请求队列中有消息时候获取请求信息并交给ChunkHander负责处理 。


推荐阅读