《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是 ElasticJob 一个面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。

可商用开源软件etl 任务调度(开源精选ElasticJob)(1)

ElasticJob可以通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。

ElasticJob 已于 2020 年 5 月 28 日成为 Apache ShardingSphere 的子项目。

官方网站:https://Shardingsphere.apache.org/elasticjob/

项目介绍

使用 ElasticJob 能够让开发工程师不再担心任务的线性吞吐量提升等非功能需求,使他们能够更加专注于面向业务编码设计; 同时,它也能够解放运维工程师,使他们不必再担心任务的可用性和相关管理需求,只通过轻松的增加服务节点即可达到自动化运维的目的。

ElasticJob-Lite

定位为轻量级无中心化解决方案,使用 jar 的形式提供分布式任务的协调服务。

可商用开源软件etl 任务调度(开源精选ElasticJob)(2)

架构图

ElasticJob-Cloud

采用自研 Mesos Framework 的解决方案,额外提供资源治理、应用分发以及进程隔离等功能。

可商用开源软件etl 任务调度(开源精选ElasticJob)(3)

架构图

功能列表

弹性调度

资源分配

作业治理

作业依赖(TODO)

作业开放生态

可视化管控端

环境要求

Java

请使用 Java 8 及其以上版本。

Maven

请使用 Maven 3.5.0 及其以上版本。

ZooKeeper

请使用 ZooKeeper 3.6.0 及其以上版本。

Mesos(仅 ElasticJob-Cloud 使用)

请使用 Mesos 1.1.0 及其兼容版本。

快速开始

ElasticJob-Lite

引入 Maven 依赖

<dependency> <groupId>org.apache.shardingsphere.elasticjob</groupId> <artifactId>elasticjob-lite-core</artifactId> <version>${latest.release.version}</version> </dependency>

作业开发

public class MyJob implements SimpleJob { @Override public void execute(ShardingContext context) { switch (context.getShardingItem()) { case 0: // do something by sharding item 0 break; case 1: // do something by sharding item 1 break; case 2: // do something by sharding item 2 break; // case n: ... } } }

作业配置

JobConfiguration jobConfig = JobConfiguration.newBuilder("MyJob", 3).cron("0/5 * * * * ?").build();

作业调度

public class MyJobDemo { public static void main(String[] args) { new ScheduleJobBootstrap(createRegistryCenter(), new MyJob(), createJobConfiguration()).schedule(); } private static CoordinatorRegistryCenter createRegistryCenter() { CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("zk_host:2181", "my-job")); regCenter.init(); return regCenter; } private static JobConfiguration createJobConfiguration() { // 创建作业配置 // ... } }

ElasticJob-Cloud

引入 Maven 依赖

<dependency> <groupId>org.apache.shardingsphere.elasticjob</groupId> <artifactId>elasticjob-cloud-executor</artifactId> <version>${latest.release.version}</version> </dependency>

作业开发

public class MyJob implements SimpleJob { @Override public void execute(ShardingContext context) { switch (context.getShardingItem()) { case 0: // do something by sharding item 0 break; case 1: // do something by sharding item 1 break; case 2: // do something by sharding item 2 break; // case n: ... } } }

作业启动

public class MyJobDemo { public static void main(final String[] args) { JobBootstrap.execute(new MyJob()); } }

作业打包

tar -cvf my-job.tar.gz my-job

更多内容:https://shardingsphere.apache.org/elasticjob/index_zh.html

,