XXL-JOB任务分片

分布式定时任务调度实战 目录 1、为什么需要定时任务 2、定时任务调度框架 2.1 单机 2.2 分布 3、xxl-job和elastic-job对比 3.1 支持集群部署方式 3.2 多节点部署任务执行方式 3.3 日志可追溯 3.4 监控告警 3.5 弹性扩容缩容 3.6 支持并行调度 3.7 高可用策略 3.8 失败处理策略 3.9 动态分片策略 3.10 总结和结论 4、xxl-job实践 4.1 下载源码 4.2 执行数据库脚本 4.3 配置调度中心文件 4.4 部署调度中心. 阅读详情
AI摘要

文章介绍了XxlJob中的任务类型,包括单个任务、单机多任务分片和集群分片。详细阐述了各种路由策略,如固定、轮询、随机等,并讨论了阻塞处理策略,如单机串行和丢弃后续调度。此外,文章通过代码示例展示了如何实现单机和集群模式下的任务分片,并提出了对于范围分片的思考。

任务类型

  • 单个任务:一个任务实例便可完成

    • 单机单任务:单机模式下任何路由模式都只有一个实例执行

    • 集群单任务:由路由策略(广播模式除外)选择其中一个实例完成

  • 分片任务:集群部署,每个实例都同时执行一部分数据。分片方式:取模分片,范围分片

    • 单机多任务分片:单机模式下,创建同类型任务多个任务计划,手工分片数据作为参数

    • 集群任务分片:只有广播模式会通知所有实例都会运行,每个节点取模执行任务

任务配置

路由策略

策略参数值详细含义
第一个FIRST固定选择第一个机器
最后一个LAST固定选择最后一个机器
轮询ROUND依次选择执行
随机RANDOM随机选择在线的机器
一致性HASHCONSISTENT_HASH每个人物按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上
最不经常使用LEAST_FREQUENTLY_USED使用频率最低的机器优先被选择
最近最久未使用LEAST_RECENTLY_USED最久未使用的机器优先被选择
故障转义FAILOVER按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度
忙碌转义BUSYOVER按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定位目标执行器并发起调度
分片广播SHARDING_BROADCAST广播触发对应集群中所有机器执行一次任务,同事系统自动传递分片参数,可根据分片参数开发分片任务

子任务ID:

当有任务需要相互依赖时使用,比如在对账业务里,下载对账文件任务成功之后,才开始对账。那么,可以把这几个任务当成一个大任务来串行处理,即在一个任务的末尾触发另一个任务。

如果我们需要在本任务执行结束并且执行成功的时候触发另外一个任务,那么就可以把另外的任务作为本任务的子任务运行,就只需要在本任务里填入另外一个任务的jobId即可(可以在任务列表查看JobId)

阻塞处理策略:

策略参数值含义
单机串行,默认SERIAL_EXECUTION调度请求进入单机执行器后,调度请求进入FIFO
丢弃后续调度DISCARD_LATER调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败
覆盖之前调度COVER_EARLY调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本次调度任务

单个任务和集群任务

@Component
public class SimpleJobHandler {

    @XxlJob(value ="simpleJobHandler" )
    public ReturnT<String> execute(String param) throws InterruptedException {

        IntStream.rangeClosed(1,20).forEach(index->{
            XxlJobLogger.log("simpleJobHandler>>"+index);
        });
        //官方文档说 如果任务超时 是采用interrupt机制打断子线程的,因此需要将InterruptedException 向上抛出
        //不能catch,否则任务超时后 任务还会被正常执行完
        Thread.sleep(ThreadLocalRandom.current().nextInt(10000));

        //任务超时后 这句日志不会被打印出来:xxl-job任务需用XxlJobLogger输出日志
        XxlJobLogger.log("执行完毕");

        return ReturnT.SUCCESS;
    }

}

xxl-job任务需用XxlJobLogger输出日志

单机模式:只启动一个任务执行器实例,修改路由模式即便是广播模式依然只有一个实例运行job

集群模式:启动多个任务实例,这里可以把每个实例的端口号都改为不同,可以看到同一个任务类有多个机器。除了广播模式,其他模式都只会选择机器列表中的一个执行job

单机多任务分片

对于多10条数据,我们可以创建多个任务每个任务完成不同的ID数据,只要ID不重合,那么就不会重复执行对应的事务

这里我们按id划分,[1,3,5,7,9],[2,4,6,8,10]为两组

    @XxlJob(value = "singleMachineMultiTasks", init = "init", destroy = "destroy")
    public ReturnT<String> singleMachineMultiTasks(String cities) throws Exception {

        if (StringUtils.isEmpty(cities)) {
            return new ReturnT(FAIL_CODE, "latnIds不能为空");
        }
         XxlJobLogger.log("任务参数={}", cities);
        //str转int数组,遍历ID列表
        Arrays.stream(cities.split(",")).map(String::trim).filter(StringUtils::isNotBlank).map(Integer::parseInt).forEach(latnId -> {
            //获取对应ID的未处理数据集合,遍历未处理数据集合并执行对应业务
            List<String> tasks = singleMachineMultiTasks.get(latnId);
            Optional.ofNullable(tasks).ifPresent(todoTasks -> {
                todoTasks.forEach(task -> {
                    XxlJobLogger.log("【{}】执行【{}】,任务内容为:{}", Thread.currentThread().getName(), latnId, task);
                });
            });
        });
        return ReturnT.SUCCESS;
    }


分别启动两个任务,并在管理器上配置好对应的参数
在这里插入图片描述
查看执行日志,两个控制台分别打印对应的执行日志如下:

任务参数=1,3,5,7,9
【1】执行【{Thread-1}】,任务内容为:{武汉}
【3】执行【{Thread-1}】,任务内容为:{北京}
【5】执行【{Thread-1}】,任务内容为:{上海}



任务参数=2,4,6,8,10
【2】执行【{Thread-20}】,任务内容为:{222}
【4】执行【{Thread-20}】,任务内容为:{444}
【6】执行【{Thread-20}】,任务内容为:{666}

集群分片

采用多机器取模的方式,来为不同的机器指定各自服务的ID列表

 @XxlJob(value = "multiMachineMultiTasks", init = "init", destroy = "destroy")
    public ReturnT<String> multiMachineMultiTasks(String params) throws Exception {
        ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
        int n = shardingVO.getTotal(); // 动态获取所有实例数  
        int i = shardingVO.getIndex(); // 当前为第i个序号

        IntStream.range(0, CITY_ID_LIST.size()).forEach(cityIndex -> {
             //使用取余分片
            if (cityIndex % n == i) {
                int city = CITY_ID_LIST.get(cityIndex);
                List<String> tasks = singleMachineMultiTasks.get(city);
                Optional.ofNullable(tasks).ifPresent(todoTasks -> {
                    todoTasks.forEach(task -> {
                        XxlJobLogger.log("实例【{}】执行【{}】,任务内容为:{}", i, city, task);
                    });

                });
            }
        });
        return ReturnT.SUCCESS;
    }


 
    public void init() {
     log.info("init");
 }

 public void destroy() {
     log.info("destory");
 }

如果不显示的指明生命周期函数,在方法执行完之后,会被销毁。

新增一个任务,路由策略为分片广播
在这里插入图片描述
启动多个执行器实例
在这里插入图片描述
可以看到这个任务执执行器的机器地址有多个实例,说明它是集群模式运行。

查看控制台每个实例的日志都会根据取余分片执行不同的ID和任务内容
在这里插入图片描述
如果两个停一个,分片总数会发生变化,并且当前分片数也可能会发生变化

提出问题:取模方式对于顺序ID(自增ID)能很好的均匀分派分片数,那么对于范围分片(时间段分片)显然这里是没有提供类似分片算法的,根据实际项目情况,不一定非要用分片算法,不过不用分片算法,那么单例job又和没用有何区别呢?

xxl-job - 分片任务实战 xxl-job 分布式定时任务 调度中心 集群 分片 实战 阅读详情

相关推荐

ElasticJob‐Lite:作业分片策略介绍与源码分析

分片 弹性调度是ElasticJob最重要的功能,也是这款产品名称的由来。它是一款能够让任务通过分片进行水 平扩展的任务处理系统。 ElasticJob中任务分片项的概念,使得任务可以在分布式的环境下运行,每台任务服务器只运行分配给该服务器的分片。随着服务器的增加或宕机,ElasticJob会近乎实时的感知服务器数量的变更,从而重新为分布式的任务服务器分配更加合理的任务分片项,使得任务可以随着资源的增加而提升效率。 任务的分布式执行,需要将一个任务拆分为多个独立的任务项,然后由分布式的服务器分别执行某一个或

kaven 1578

xxl-job--03--分片广播 & 动态分片

xxl-job 是一个分布式任务调度平台,支持定时任务和分片任务。其中,分片任务可以将一个大任务拆分成多个小任务,分布式地执行,提高任务的执行效率和可靠性。分片任务中,有一种特殊的任务类型叫做分片广播任务,可以将一个任务广播到所有的执行器节点上执行,本质上是一种并行执行的方式。所有相关节点全部执行一次采用传统轮询调度缺点:轮询调度只会调度某一台节点,也就是这100W数据都会冲击到1台节点执行,显然效率不合格。在调度中心创建任务的时候,选择路由策略为:分片路由。

时光里的博客 4424

XXL-Job与SpringBoot整合实战:从零搭建到任务分片配置全流程

本文详细介绍了如何将XXL-Job分布式任务调度平台与SpringBoot应用进行深度整合,涵盖从零搭建调度中心、执行器配置到高级任务分片功能的全流程实战。文章重点解析了任务分片这一核心高级特性,为构建高可靠、可扩展的分布式任务调度系统提供了完整解决方案。

weixin_29209801的博客 265

xxl-job简单任务和分片任务

文章目录简单任务分片任务 简单任务 @Component public class SimpleJobHandler { @XxlJob(value ="simpleJobHandler" ) public ReturnT<String> execute(String param) throws InterruptedException { IntStream.rangeClosed(1,20).forEach(index->{

我就是我的博客 7788

从理论到实践:用CST微波工作室完成单站雷达RCS仿真的完整指南

本文提供了一份利用CST微波工作室进行单站雷达RCS仿真的完整实践指南。文章深入剖析了从求解器选择(重点推荐积分方程法)、模型与材料设置、平面波激励定义到后处理分析的完整逻辑链条,旨在帮助工程师不仅完成仿真,更能理解其背后的物理原理与工程考量,从而高效、精准地评估目标的电磁散射特性。

weixin_29256771的博客 179

Deepface实战避坑:人脸识别模型VGG-Face、Facenet、ArcFace怎么选?附各模型性能与速度实测对比

本文深入对比了DeepFace框架中VGG-Face、Facenet和ArcFace三种主流人脸识别模型的性能与适用场景,提供了详细的实测数据和选型建议。通过分析各模型在CPU/GPU环境下的推理速度、内存占用和准确率表现,帮助开发者根据实际需求(如门禁系统、相册分类或视频流分析)选择最优模型,并给出工程化部署的避坑指南和优化技巧。

weixin_42625070的博客 305

【 XXL-JOB】 XXL-JOB任务分片

xxl-job 是一个分布式任务调度平台,支持定时任务和分片任务。其中,分片任务可以将一个大任务拆分成多个小任务,分布式地执行,提高任务的执行效率和可靠性。分片任务中,有一种特殊的任务类型叫做分片广播任务,可以将一个任务广播到所有的执行器节点上执行,本质上是一种并行执行的方式。分片广播是 xxl-job 的一种任务类型,适用于一些需要并行执行的任务场景。数据处理任务:例如对大量数据进行清洗、分析、转换等操作,可以将任务拆分成多个小任务,分布式地执行,提高任务的执行效率和可靠性。

DreamSun的博客 3780

希捷硬盘卡死修复实战:U盘启动盘制作与低格清零全流程

机械硬盘使用多年后常出现卡顿、假死、坏道等问题,很多用户在网上搜索“希捷硬盘低格工具”或“U盘硬盘复活器”,却发现要么工具不明,要么操作不当造成二次损伤。其实所谓修复工具,本质是U盘启动环境配合硬盘检测与清零软件,低格并非修复物理坏道,而是通过全盘写零触发主控重映射,隔离不稳定扇区。懂原理后,用官方SeaTools、Ventoy/U盘启动盘、Victoria或Linux dd等组合工具,即可对可抢救的硬盘做清零修复。这一技术适用于逻辑坏道、SMART警告、扇区不稳定等场景,但需先备份数据并判断盘体是否有异响

weixin_30431445的博客 215

XXL-JOB 中的任务分片调度

liu_0_1的博客 2774

COD论文笔记VSCode: General Visual Salient and Camouflaged Object Detection with 2D Prompt Learning

VSCode模型通过引入领域特定提示和任务特定提示,结合提示区分损失,成功地在单一模型中处理多个显著目标检测和伪装目标检测任务。这种方法不仅提高了模型的性能,还展示了其对未见任务的泛化能力。作者使用 Visual saliency transformer ICCV 2021 作为baseline model这张图展示了VSCode模型的整体框架,特别强调了2D提示学习方法。

985小菜鸡 1625

ROS2实战:从零部署Cartographer激光SLAM系统

本文详细介绍了在ROS2 Humble环境下,从零开始部署Cartographer激光SLAM系统的完整实战流程。内容涵盖环境准备、Cartographer安装(APT与源码编译两种方式对比)、工作空间与功能包创建、核心启动文件与Lua配置文件编写、系统构建与可视化启动,以及地图保存与实战调参技巧,帮助开发者快速构建稳定可靠的机器人SLAM应用。

weixin_29213655的博客 248

SpringBoot整合XXL-JOB【05】- 任务分片

在实际业务场景中,我们可能会碰到需要短时间批量执行的定时任务,此时如果我们不做任何处理,只是像前面那样去执行,可能出现上一批的任务还没执行完,定时的时间就到了,那么势必会对业务产生影响,所以就需要我们对批量任务进行分片处理,本节就让我们看看Xxl-job如何做分片处理。

主力语言:Golang + Java 1218

逆向解析抖音核心校验参数:bd-ticket-guard-client-data的Python生成逻辑

本文深入解析了抖音核心校验参数bd-ticket-guard-client-data的生成逻辑,详细介绍了其动态证书生成、非对称加密机制及Python实现方法。通过逆向分析,揭示了抖音安全体系的双层验证机制,包括RSA密钥对生成、证书签名及时间戳校验等关键技术要点,为开发者提供了一套完整的参数生成解决方案。

weixin_26642481的博客 404

xxl-job的多节点分片执行任务

一般情况下,我们希望我们编写的job在一个机器节点上执行即可。 可如果是集群环境,我们job被部署到了集群多个节点,xxl-job需要做到只要有一个节点去执行job即可 (不需要重复执行),这时候需要依赖xxl的任务路由策略进行分配节点。

yuxiangmitu的博客 4399

nuScenes数据集详细介绍

nuScenes网上介绍资料较多,但是大部分仅仅是对官网的翻译,缺乏各个文件的内在联系介绍。例如,nuScenes激光雷达的数据格式,点云包含哪几种属性。再比如,sample文件夹和sweeps文件夹下的文件关系,以及是如何在相关json文件中体现的。本文将详细介绍nuScenes数据集的各个部分。

叶子的博客 1万+

ValueError: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C 解决方案

本文主要介绍了ValueError: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject解决方案,希望能对使用Numpy的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

xxl-job分片广播/分片任务的简单示例

xxl-job的分片广播,分片任务

weixin_43899377的博客 1433

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

XXL-Job分布式任务调度框架-单机模式和分片模式执行任务4

集群模式:启动多个任务实例,这里可以把每个实例的端口号都改为不同,可以看到同一个任务类有多个机器。除了广播模式,其他模式都只会选择机器列表中的一个执行job。单机模式:只启动一个任务执行器实例,修改路由模式即便是广播模式依然只有一个实例运行job。单机多任务分片:单机模式下,创建同类型任务多个任务计划,手工分片数据作为参数。2.集群部署,每个实例都同时执行一部分数据。分片方式:取模分片,范围分片。集群任务分片:只有广播模式会通知所有实例都会运行,每个节点取模执行任务。1.单个任务:一个任务实例便可完成。

健康平安的活着的专栏 4579

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

XXL-JOB分片任务处理城市数据的实践方案

XXL-JOB分片任务处理城市数据的实践方案 【免费下载链接】xxl-job XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 项目地址...

gitblog_01423的博客 473

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

超越任务调度的极致:初探分布式定时任务 XXL-JOB 分片广播

XXL-JOB 是一个分布式任务调度平台,支持分片任务执行。

maple05的博客 1647

XXL-JOB与SpringBoot整合实战:从零搭建到任务分片全流程

本文详细介绍了XXL-JOB与SpringBoot的深度整合,从环境搭建到任务分片全流程实战。通过分布式任务调度平台XXL-JOB,结合SpringBoot实现高并发场景下的任务分片处理,提升系统性能和可靠性。涵盖调度中心部署、执行器集成、分片策略实现及生产环境优化等核心内容。

bash7scripter的博客 596

任务调度中心XXL-JOB小白教程,学习笔记,避免重复调度,作业分片--黑马程序员笔记及自己的见解

任务的幂等性是指:对于数据的操作不论多少次,操作的结果始终是一致的。

qq_62357662的博客 4027

巧妙使用xxl-job分片任务完成大数据量消费,实现无状态分布式任务

1、 现有一个需求,需要在很短的时间内将数据库中的数据在限定时间内完成,比如一个小时完成1万笔业务数据并回写数据消费完状态,在测试过程当中一台机器去消费数据很慢,而且消费数据量可能短时间内暴增,需要动态增加处理能力,在没有使用xxl_job前,是使用redis分布式锁完成的,主要是每个消费者一定要取到不同数据消费,不能重复消费数据,因此使用分布式锁来锁定多个程序在同一时刻只能有一个应用消费数据,...

m0_37606574的博客 1万+
上一篇: windows11安装docker desktop和K8S环境创建镜像和运行dashboard
下一篇: mysql插入更新insert into
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值