1. 简介
任务调度系统可以对多种任务进行调度(定时、编排、重刷历史数据等),有些任务调度系统还提供了分布式任务,帮助用户解决大数据处理的难题。分布式任务主要分为静态分片和动态分片。
1.1 静态分片
主要场景是处理固定的分片数,比如分库分表固定1024张表,需要若干台机器分布式去处理。
主流的框架,开源有elastic-job。
1.2 动态分片
主要场景是分布式处理未知数据量的数据,比如一张大表不停在变更,想要分布式跑批。
主流的框架是schedulerx2.0提供的MapReduce模型,暂时还没有对外开源。
2. 多语言版本的分片模型
Schedulerx2.0当前支持多语言版本的分片模型,还具有高可用、流控、失败重试等特性,需要客户端版本1.1.0以上。
2.1 Java版本
- 控制台创建任务的时候,执行方式选择"分片运行",分片参数格式如下
- 后端代码继承JavaProcessor即可,通过JobContext.getShardingId()可以拿到分片号,通过JobContext.getShardingParameter()可以拿到分片参数,比如
@Component
public class HelloWorldProcessor extends JavaProcessor {
@Override
public ProcessResult process(JobContext context) throws Exception {
System.out.println("分片id=" + context.getShardingId() + ", 分片参数=" + context.getShardingParameter());
return new ProcessResult(true);
}
}
- 执行列表可以查看分片详情
2.2 python版本
python用户想使用分布式跑批的福音来了,只需要安装一个agent,脚本都可以由schedulerx2.0维护:
- 下载schedulerx-agent包接入。
- 直接在控制台写python脚本和分片参数即可,脚本里sys.argv[1]是分片号,sys.argv[2]是分片参数
- 执行列表可以查看分片详情
2.3 其他脚本语言
shell和go脚本语言,和python类似,第一个系统参数是分片号,第二个是分片参数,就不一一demo了。
2.4 高可用
分片模型基于Map模型开发,可以继承Map模型高可用的特性,即某台worker执行过程中挂了,master worker会把分片failover到其他slave节点执行。
2.5 流控
分片模型基于Map模型开发,可以继承Map模型流控的特性,即可以控制单机子任务并发度。比如有1000个分片,一共10台机器,可以控制最多5个分片并发跑,其他在队列等待
2.6 分片自动失败重试
分片模型基于Map模型开发,可以继承Map模型子任务失败自动重试的特性