XXL-Job海量数据处理-分片任务实战
创始人
2024-03-17 09:09:46
0

在这里插入图片描述

文章目录

          • 一、需求
            • 1. 场景
            • 2. 分析
            • 3. 案例
          • 二、什么是分⽚任务
            • 2.1. 分⽚路由策略
            • 2.2. 海量数据处理
            • 2.3. 分片数量
            • 2.4. 分片值颁发
            • 2.5. 案例
          • 三、解决思路
            • 3.1. 数据拆分
            • 3.2. 分片数量
            • 3.3. 分⽚⽅式
            • 3.4. 路由策略
            • 3.5. 程序实战

一、需求
1. 场景

有⼀个任务需要处理100W条数据,每条数据的业务逻辑处理
要0.1s

2. 分析

对于普通任务来说,只有⼀个线程来处理 可能需要10万秒才能处理完,业务则严重受影响

3. 案例

双⼗⼀⼤促,给1000万⽤户发营销短信

二、什么是分⽚任务
2.1. 分⽚路由策略

执⾏器集群部署,如果任务的路由策略选择【分⽚⼴播】,⼀次任务调度将会【⼴播触发】对应集群中所有执⾏器执⾏⼀次任务,同时系统⾃动传递分⽚参数,执⾏器可根据分⽚参数开发分⽚任务。

2.2. 海量数据处理

需要处理的海量数据,以执⾏器为划分,每个执⾏器分配⼀定的任务数,并⾏执⾏。

2.3. 分片数量

XXL-Job⽀持动态扩容执⾏器集群,从⽽动态增加分⽚数量,到达更快处理任务。

2.4. 分片值颁发

分⽚的值是调度中⼼分配的

2.5. 案例
// 当前分⽚数,从0开始,即执⾏器的序号
int shardIndex = XxlJobHelper.getShardIndex();
//总分⽚数,执⾏器集群总机器数量
int shardTotal = XxlJobHelper.getShardTotal();

在这里插入图片描述

三、解决思路
3.1. 数据拆分

如果将100W数据均匀分给集群⾥的10台机器同时处理,每台机器耗时,1万秒即可,耗时会⼤⼤缩短,也能充分利⽤集群资源

3.2. 分片数量

在xxl-job⾥,可以配置执⾏器集群有10个机器,那么分⽚总
数是10,分⽚序号0~9 分别对应那10台机器。

3.3. 分⽚⽅式
id % 分⽚总数 余数是0 的,在第1个执⾏器上执⾏
id % 分⽚总数 余数是1 的,在第2个执⾏器上执⾏
id % 分⽚总数 余数是2 的,在第3个执⾏器上执⾏
...
id % 分⽚总数 余数是9 的,在第10个执⾏器上执⾏
3.4. 路由策略

选择为【分⽚⼴播】
在这里插入图片描述

3.5. 程序实战
  • 基础案例
 /*** 2、分片广播任务*/@XxlJob("shardingJobHandler")public void shardingJobHandler() throws Exception {XxlJobHelper.log(" shardingJobHandler start");logger.info("shardingJobHandler execute......");// 分片参数int shardIndex = XxlJobHelper.getShardIndex();int shardTotal = XxlJobHelper.getShardTotal();XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);// 业务逻辑for (int i = 0; i < shardTotal; i++) {if (i == shardIndex) {XxlJobHelper.log("第 {} 片, 命中分片开始处理", i);} else {XxlJobHelper.log("第 {} 片, 忽略", i);}}XxlJobHelper.handleSuccess(" shardingJobHandler complete");}
  • 根据id进⾏分⽚取模(部署3个执⾏器)
 /*** 2、分⽚⼴播任务*/@XxlJob("shardingJobHandler")public void shardingJobHandler() throws Exception {XxlJobHelper.log(" shardingJobHandler start");logger.info("shardingJobHandler execute......");// 当前分⽚数,从0开始,即执⾏器的序号int shardIndex = XxlJobHelper.getShardIndex();//总分⽚数,执⾏器集群总机器数量int shardTotal = XxlJobHelper.getShardTotal();XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);List allUserIds = getAllUserIds();allUserIds.forEach(obj -> {if (obj % shardTotal == shardIndex) {logger.info("第 {} ⽚, 命中分⽚开始处理⽤户id={}", shardIndex, obj);}});}private List getAllUserIds() {List ids = new ArrayList<>();for (int i = 0; i < 100; i++) {ids.add(i);}return ids;}

相关内容

热门资讯

【2025年度消费避坑图鉴】保... 央广网北京12月26日消息(记者白德彰)在本期《年度消费避坑图鉴》中,我们聚焦保险领域。尽管投诉占比...
动态要闻 | 珠海市律师协会涉... 【珠海律师、珠海法律咨询、珠海律师事务所、京师律所、京师珠海律所】 12月24日,珠海市律师协会涉外...
律师最难跟客户说出的一句话:赢... 律师代理案件,最开心的时候莫过于通过律师与客户的共同配合,不但赢得官司,客户还成功拿到钱。 对于有些...
原创 欧... 12月23日,据观察者网报道,俄罗斯副外长谢尔盖表示,虽然俄罗斯跟北约存在冲突风险但他们愿意以法律形...
东京通胀降温,加息难停?日元陷... 日本总务省公布的数据显示,东京12月核心CPI同比上涨2.3%,超预期降温。 周五,日本股市开盘走高...
专业文章丨跨境模具纠纷高效和解... 【珠海律师、珠海法律咨询、珠海律师事务所、京师律所、京师珠海律所】 (本文转载自北京市京师律师事务所...
全总等三部门联合发布2025年... 新华社北京12月25日电(记者樊曦、冯家顺)记者12月25日从全国总工会了解到,全国总工会与最高人民...
对“问题法规”要及时纠正 从事网约车经营要求车辆购置总价不得低于12万元、残疾人机动轮椅车登记需有本市常住户籍……日前提请全国...
专业文章丨相对不起诉:一起交通... 【珠海律师、珠海法律咨询、珠海律师事务所、京师律所、京师珠海律所】 (本文转载自北京市京师郑州律师事...