ElasticJob-03-入门

144 阅读3分钟

概述

ElasticJob是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。 Elastic-job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供轻量级的协调服务,外部依赖Zookeeper。

功能列表

  • 分布式调度协调
  • 弹性扩容缩容
  • 失效转移
  • 错过执行作业重触发
  • 作业分片一致性,保证同一分片在分布式环境中仅一个执行实例
  • 自诊断并修复分布式不稳定造成的问题
  • 支持并行调度
  • 支持作业生命周期操作
  • 丰富的作业类型
  • Spring整合以及命名空间提供
  • 运维平台

基本概念

分片概念

任务的分片执行,将一个任务拆分为多个独立的任务项,然后由分布式的服务器分别执行其中某一个或几个分片项。

分片项与业务处理解耦

Elastic-job不直接提供数据处理的功能,框架会将分片项分配至各个运行中的服务器,开发者需要自行处理分片项与真实数据的对应关系。

个性化参数的使用场景

个性化参数即shardingItemParameter,可以和分片项匹配对应关系,用于将分片项的数字转换为更加可读的业务代码。 类似一种映射关系,比如0映射“北京”,1映射“上海”,2映射“广州”等。

核心理念

分布式调度

Elastic-Job-Lite并无作业调度中心节点,而是基于部署作业框架的程序在达到相应时间点各自触发调度。 注册中心仅用于作业注册和监控信息存储,而主作业节点仅用于处理分片和清理等功能。

作业高可用

Elastic-Job-Lite 提供安全的方式执行作业,将分片总数设置为1,并使用多于1台的服务器执行作业,作业将会以1主n从的方式执行。

最大限度利用资源

Elastic-Job-Lite将最大限度提高作业的吞吐量,将分片项设置为大于服务器的数量,最好是大于服务器倍数的数量,作业将会合理的利用资源,动态的分配分片项。

3台服务器(A,B,C),分成10片,则分片项分配结果为服务器A=0,1,2,服务器B=3,4,5,服务器C=6,7,8,9。如果服务器C突然崩溃,那么分片项分配结果为服务器A=0,1,2,3,4,服务器B=5,6,7,8,9。在不丢失分片项的情况下,最大限度利用现有资源提高吞吐量。

整体架构图

elastic_job_lite.png

快速入门

1.使用API配置启动

引入Maven依赖

<dependency>
    <groupId>io.elasticjob</groupId>
    <artifactId>elastic-job-lite-core</artifactId>
    <version>2.1.5</version>
</dependency>

作业开发

public class MyElasticJob implements SimpleJob {

    @Override
    public void execute(ShardingContext shardingContext) {
        System.out.println("MyElasticJob shardingItem======="+shardingContext.getShardingItem()+", ShardingContext===="+ JSON.toJSONString(shardingContext));
    }
}

相关配置并启动作业

public class MyElasticJobManager {


    public static void main(String[] args) {
        new JobScheduler(createRegistryCenter(),createJobConfiguration()).init();
    }


    /**
     * 创建注册中心
     * @return
     */
    private static CoordinatorRegistryCenter createRegistryCenter(){
        CoordinatorRegistryCenter registryCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("127.0.0.1:2181","my-elastic-job-demo"));
        registryCenter.init();
        return registryCenter;
    }

    /**
     * 作业配置
     * @return
     */
    private static LiteJobConfiguration createJobConfiguration(){
        //定义作业核心配置
        JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder("demoSimpleJob","0/15 * * * * ?",10).build();

        //定义Simple类型配置
        SimpleJobConfiguration simpleJobConfiguration = new SimpleJobConfiguration(simpleCoreConfig,MyElasticJob.class.getCanonicalName());

        //定义Lite作业根配置
        return LiteJobConfiguration.newBuilder(simpleJobConfiguration).build();
    }
}

启动1个任务时

image.png

启动2个任务时,自动做了分片

image.png

image.png

对应ZK上节点概览 image.png

2.使用Spring配置启动

引入maven依赖

<dependency>
    <groupId>com.dangdang</groupId>
    <artifactId>elastic-job-lite-spring</artifactId>
    <version>2.0.5</version>
</dependency>