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


BATCH_JOB_EXECUTION_PARAMS:作业参数表 , 用于存放每个Job执行时候的参数信息 , 该参数实际对应Job实例的 。
BATCH_JOB_EXECUTION:作业执行器表 , 用于存放当前作业的执行信息 , 比如创建时间 , 执行开始时间 , 执行结束时间 , 执行的那个Job实例 , 执行状态等 。
BATCH_JOB_EXECUTION_CONTEXT:作业执行上下文表 , 用于存放作业执行器上下文的信息 。
BATCH_STEP_EXECUTION:作业步执行器表 , 用于存放每个Step执行器的信息 , 比如作业步开始执行时间 , 执行完成时间 , 执行状态 , 读写次数 , 跳过次数等信息 。
BATCH_STEP_EXECUTION_CONTEXT:作业步执行上下文表 , 用于存放每个作业步上下文的信息 。
实现作业的健壮性与扩展性
批处理要求Job必须有较强的健壮性 , 通常Job是批量处理数据、无人值守的 , 这要求在Job执行期间能够应对各种发生的异常、错误 , 并对Job执行进行有效的跟踪 。
一个健壮的Job通常需要具备如下的几个特性:
1. 容错性
在Job执行期间非致命的异常 , Job执行框架应能够进行有效的容错处理 , 而不是让整个Job执行失败;通常只有致命的、导致业务不正确的异常才可以终止Job的执行 。
2. 可追踪性
Job执行期间任何发生错误的地方都需要进行有效的记录 , 方便后期对错误点进行有效的处理 。例如在Job执行期间任何被忽略处理的记录行需要被有效的记录下来 , 应用程序维护人员可以针对被忽略的记录后续做有效的处理 。
3. 可重启性
Job执行期间如果因为异常导致失败 , 应该能够在失败的点重新启动Job;而不是从头开始重新执行Job 。
「」一文搞懂大数据批量处理框架Spring Batch的完美解析方案是什么
文章图片

文章图片

框架提供了支持上面所有能力的特性 , 包括Skip(跳过记录处理)、Retry(重试给定的操作)、Restart(从错误点开始重新启动失败的Job):
Skip , 在对数据处理期间 , 如果数据的某几条的格式不能满足要求 , 可以通过Skip跳过该行记录的处理 , 让Processor能够顺利的处理其余的记录行 。
Retry , 将给定的操作进行多次重试 , 在某些情况下操作因为短暂的异常导致执行失败 , 如网络连接异常、并发处理异常等 , 可以通过重试的方式避免单次的失败 , 下次执行操作时候网络恢复正常 , 不再有并发的异常 , 这样通过重试的能力可以有效的避免这类短暂的异常 。
Restart , 在Job执行失败后 , 可以通过重启功能来继续完成Job的执行 。在重启时候 , 批处理框架允许在上次执行失败的点重新启动Job , 而不是从头开始执行 , 这样可以大幅提高Job执行的效率 。
对于扩展性 , 框架提供的扩展能力包括如下的四种模式 :
Multithreaded Step 多线程执行一个Step;
Parallel Step 通过多线程并行执行多个Step;
Remote Chunking 在远端节点上执行分布式Chunk操作;
Partitioning Step 对数据进行分区 , 并分开执行;
我们先来看第一种的实现Multithreaded Step:
「」一文搞懂大数据批量处理框架Spring Batch的完美解析方案是什么
文章图片

文章图片

批处理框架在Job执行时默认使用单个线程完成任务的执行 , 同时框架提供了线程池的支持(Multithreaded Step模式) , 可以在Step执行时候进行并行处理 , 这里的并行是指同一个Step使用线程池进行执行 , 同一个Step被并行的执行 。使用tasklet的属性task-executor可以非常容易的将普通的Step变成多线程Step 。
Multithreaded Step的实现示例:
「」一文搞懂大数据批量处理框架Spring Batch的完美解析方案是什么


推荐阅读