エラスティックジョブ分散スケジューリングフレームワーク

1つの弾力性のある仕事のフレームワーク

Quartzフレームワークとzooepperに基づいて開発されました。

主に、クラスター内のジョブが複数回実行され、クラスターがジョブを水平方向にスケーリングできないという問題(実行効率の問題)を解決します。機能は次のとおりです。

  • 分散スケジューリング調整(zookeeperが提供)
  • 柔軟な伸縮
  • フェイルオーバー(ノードに障害が発生すると、他のノードがジョブの実行を引き継ぎます)
  • 逃したジョブの再トリガー
  • ジョブシャードの一貫性。分散環境の1つのインスタンスでのみ同じシャードが実行されるようにします(複数の実行は発生しません)。
  • 豊富なジョブタイプ(シンプル、データフロー)
  • Springの統合と名前空間のプロビジョニング(SpringJobScheduler)
  • 運用および保守プラットフォームの提供(elastic-job-lite-console)

 

2.エラスティックジョブの使い方は?

最初にzookeeperを起動する必要があります。

1.依存関係を導入する

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

2.ジョブクラスを作成する2つの方法:

2.1 SimpleJobインターフェースを実装するためのジョブクラスを作成する(単純なジョブタスク)

特徴:

public class MySimpleJob implements SimpleJob {
    @Override
    public void execute(ShardingContext shardingContext) {
        int shardingItem = shardingContext.getShardingItem();//当前分片项
        String jobParameter = shardingContext.getJobParameter();//当前分片自定义的参数,例如按照类型分片(txt、jpg、pdf等)
        //这里可以根据分片的信息,去数据查询对应的数据,进行处理
        //例如按照id奇偶数去分片。或按照类型等字段分片处理数据,提高性能
        System.out.println(new Date()+":"+JSON.toJSONString(shardingContext));
    }
}

2.2またはDataFlowJobインターフェースを実装する(データフロージョブタスク)

特徴:

public class MyDateFlowJob implements DataflowJob<Object> {
    @Override
    public List<Object> fetchData(ShardingContext shardingContext) {
        //当返回有数据时,则执行下边的processData方法,一直到没有数据返回(执行完了),本次作业完毕
        //等待进入下一次作业
        return null;
    }

    @Override
    public void processData(ShardingContext shardingContext, List<Object> data) {
        System.out.println(new Date()+"处理数据");
    }
}

3.構成クラスを作成します

すべてのステップはコードに明確に記述されています。

@Configuration
public class ElasticJobConfig {
    @Bean
    public SpringJobScheduler dataFlowJobScheduler(DataSource dataSource){
        //1、创建zookeeper配置(zookeeper地址,命名空间)
        ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration("localhost:2181", "elastic-job");

        //2、创建zookeeper配置中心,并初始化(根据zookeeper配置创建)
        ZookeeperRegistryCenter zookeeperRegistryCenter = new ZookeeperRegistryCenter(zookeeperConfiguration);
        zookeeperRegistryCenter.init();

        //3、创建作业配置(作业名称、cron表达式、分片数量)
        JobCoreConfiguration jobCoreConfiguration = JobCoreConfiguration.newBuilder("myDataflowJob", "0/30 * * * * ?", 5)
                .jobParameter("this jobParameter")//作业参数
                .description("这个作业是干什么的?描述一下")//作业描述
                .failover(true)//开始失效转移。当某节点挂掉之后,作业会分配到其他节点继续完成
                .shardingItemParameters("0=txt,1=jpg,2=pdf,3=word,4=excel")//分片附带的参数
                .build();

        //4、创建数据流作业配置(根据作业配置、实现了DataflowJob实现类的全限定名、是否流式处理创建)
        DataflowJobConfiguration dataflowJobConfiguration = new DataflowJobConfiguration(jobCoreConfiguration, MyDateFlowJob.class.getCanonicalName(),true);

        //5、创建精简版作业配置(根据简单作业配置创建)
        LiteJobConfiguration liteJobConfiguration = LiteJobConfiguration.newBuilder(dataflowJobConfiguration)
                .jobShardingStrategyClass("com.dangdang.ddframe.job.lite.api.strategy.impl.RotateServerByNameJobShardingStrategy")//配置作业分片策略类
                //默认elastic-job提供了三种分片策略:
                //1、AverageAllocationJobShardingStrategy 平均分配策略(默认)
                //2、OdevitySortByNameJobShardingStrategy 根据作业名hash值奇偶数升降ip分配策略
                //3、RotateServerByNameJobShardingStrategy 根据作业名hash值对服务器列表轮转分配策略
                //你还可以自定义分配策略实现JobShardingStrategy接口
                .overwrite(true)//覆盖注册中心配置。如果不覆盖,一次注册后,配置便再也不能改变了。
                .monitorPort(8889)//作业辅助监控端口。当生产环境不能连接作业监控时,可通过此端口导出日志查看。
                .build();

        //6、创建作业事件配置(可选)(根据数据源创建)
        //作用:把作业的执行过程写入数据库表中
        JobEventConfiguration jobEventConfiguration = new JobEventRdbConfiguration(dataSource);

        //7、创建Elastic监听器(可选)
        //作用:可以在作业执行的前后做某些操作
        MyDistributeOnceElasticJobListener listener = new MyDistributeOnceElasticJobListener(0,0);

        //8、创建spring作业定时器,并初始化(根据作业类的实例、zookeeper注册中心、精简版作业配置、[作业事件配置]、[elastic监听器])
        //作用:正式创建作业
        SpringJobScheduler springJobScheduler = new SpringJobScheduler(new MyDateFlowJob(), zookeeperRegistryCenter, liteJobConfiguration, jobEventConfiguration, listener);
        springJobScheduler.init();
        return springJobScheduler;
    }
}

4. Elastic-jobリスナーを構成します(リスナーのメソッドは、ジョブが実行されるたびに呼び出されます)(オプション)

public class MyDistributeOnceElasticJobListener extends AbstractDistributeOnceElasticJobListener {

    public MyDistributeOnceElasticJobListener(long startedTimeoutMilliseconds, long completedTimeoutMilliseconds) {
        super(startedTimeoutMilliseconds, completedTimeoutMilliseconds);
    }

    @Override
    public void doBeforeJobExecutedAtLastStarted(ShardingContexts shardingContexts) {
        System.out.println("监听器--执行之前执行的方法");
    }

    @Override
    public void doAfterJobExecutedAtLastCompleted(ShardingContexts shardingContexts) {
        System.out.println("监听器--执行之后执行的方法");
    }
}

 

 

3.エラスティックジョブ視覚化コンソールの使用方法は?

1.プロジェクトをダウンロードします:https//github.com/apache/shardingsphere-elasticjob/tree/2.1.5/elastic-job-lite、ダウンロードが完了し、解凍されます

2. Mavenパッケージはelastic-job-lite-consoleプロジェクトをパッケージ化し、ターゲットディレクトリにelastic-job-lite-console-2.1.5.tar.gzファイルがあります。

3. elastic-job-lite-console-2.1.5.tar.gzファイルを解凍し、binディレクトリに入り、start.shを実行して開始します。

4. http:// localhost:8899 /にアクセスします。アカウントパスワード:root / root

コンソールに入る

1.グローバル構成、飼育係情報とmysql情報を追加します

2.ジョブ操作:ジョブ情報とサーバー情報を表示できます

3.ジョブ履歴:ジョブの実行を表示できます

 

4.操作補助ポート8889の使用方法は?

実稼働環境でzookeeperを使用できない場合は、ジョブの実行ステータスをジョブの補助ポートを介してエクスポートして、デバッグを容易にすることができます。

1.LiteJobConfiguration構成でジョブ補助ポートを開く必要があります。

2.dumpコマンドとncコマンドを使用する必要があります。インストールする必要はありません。

3. echo dump | nc 127.0.0.1 9888> job_debug_dump.txtコマンドを実行します

 

おすすめ

転載: blog.csdn.net/sumengnan/article/details/114438556