项目中经常遇到海量数据批量处理的问题,第一时间想到通过多线程来处理,要想海量数据快速的处理完成, 就需要使用多台服务器并行处理。本文演示如何在分布式环境下使用 ElasticJob 处理海量数据, 通过 Demo 展示多机任务如何分片,作业如何拆分,如何水平扩容等问题。
1 概述
Elastic Job 是面向互联网生态和海量任务的分布式调度解决方案。最初由当当基于 ZooKeeper、 Quartz 进行二次开发的分布式解决方案。2020年 6月,经过 Apache ShardingSphere 社区投票,接纳 ElasticJob 为其子项目。 目前 ElasticJob 的四个子项目已经正式迁入 Apache 仓库。
- 源码地址: https://github.com/apache/shardingsphere-elasticjob
- 文档地址(3.X版本): https://shardingsphere.apache.org/elasticjob/current/cn/overview/
2 演示目标
- leader 节点选举;
- 任务分片, 分片是否均匀;
- 水平扩容;
3 演示源码
3.1 相关依赖包引入
- 演示代码基于 3.0.0-RC1 版本编写,环境要求: Java 8及以上版本、Maven 3.5.0 及以上版本、 ZooKeeper 3.6.0 及以上版本;
- 本文采用 Java 8、 Maven 3.6.3、 ZooKeeper 3.7.0、SpringBoot 2.3.4.RELEASE;
- ZooKeeper 3.7.0 下载地址: https://apache.claz.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
- 项目启动前需要下载并启动 ZooKeeper: ./zkServer.sh start
<dependency>
<groupId>org.apache.shardingsphere.elasticjob</groupId>
<artifactId>elasticjob-lite-core</artifactId>
<version>3.0.0-RC1</version>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>${curator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
3.2 配置文件
e