分片广播的实现与流程

1.广播任务和动态分片

2. 什么是作业分片

作业分片是指任务的分布式执行,需要将一个任务拆分为多个独立的任务项,然后由分布式的应用实例 分别执行某一个或几个分片项。

3. XXL-JOB分片
  • 广播任务: 执行器集群部署,任务路由策略选择”分片广播”情况下,一次任务调度将会广播触发集群中所有执行器 执行一次任务,系统会自动传递分片参数,可根据分片参数开发分片任务;
  • 动态分片: 分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群,从而动态增加分片数量,协同进行 业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。

3.1 XXL-JOB支持分片的好处
  • 分片项与业务处理解耦 XXL-JOB并不直接提供数据处理的功能,框架只会将分片项分配至各个运行中的作业服务器,开发者需 要自行处理分片项与真实数据的对应关系。
  • 最大限度利用资源 基于业务需求配置合理数量的执行器服务,合理设置分片,作业将会最大限度合理的利用分布式资源。
4.分片广播案例演示

目标:实现XXL-JOB作业分片的演示

方案分析:规划一个任务,两个分片,对应两个执行器,每个分片处理一部分任务。

4.1实现步骤:

  • 创建分片执行器
  • 创建任务指定刚才创建的分片执行器,在路由策略这一栏选择分片广播
  • 分片广播代码分片参数属性说明:
    • index:当前分片序号(从0开始),执行器集群列表中当前执行器的序号;
    • total:总分片数,执行器集群的总机器数量;
    目前有一万条数据,使用两个分片同时执行

/**
     * 2、分片广播任务
     */
@XxlJob("shardingJobHandler")
public ReturnT<String> shardingJobHandler(String param) throws Exception {

    // 分片参数
    ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
    XxlJobLogger.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardingVO.getIndex(), shardingVO.getTotal());

    List<Integer> list = getList(); 
    for (Integer integer : list) {
        if(integer % shardingVO.getTotal() == shardingVO.getIndex()){
            System.out.println("第"+shardingVO.getIndex()+"分片执行,执行数据为:"+integer);
        }
    }

    return ReturnT.SUCCESS;
}

public static List<Integer> getList(){
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < 10000 ; i++) {
        list.add(i);
    }
    return list;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值