XXL-Job海量数据处理-分片任务实战

news2024/11/17 15:28:03

在这里插入图片描述

文章目录

          • 一、需求
            • 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<Integer> allUserIds = getAllUserIds();

        allUserIds.forEach(obj -> {
            if (obj % shardTotal == shardIndex) {
                logger.info("第 {} ⽚, 命中分⽚开始处理⽤户id={}", shardIndex, obj);
            }
        });
    }

    private List<Integer> getAllUserIds() {
        List<Integer> ids = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            ids.add(i);
        }
        return ids;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/60794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaScript 逆向】极验四代无感验证码逆向分析

前言 四代无感验证码相较于滑块验证码区别就是没有底图&#xff0c;一键通过模式&#xff0c;所以不需要轨迹以及计算缺口距离&#xff0c;步骤更少&#xff0c;四代滑块可以阅读&#xff1a;【JavaScript 逆向】极验四代滑块验证码逆向分析 声明 本文章中所有内容仅供学习交…

C++最后一次实验及实验总结

忙活了大半个学期&#xff0c;终于学完了C&#xff0c;虽然很基础&#xff0c;但是至少算是写完了实验&#xff0c;开心~~ 实验一 实验二 实验三 实验四 实验五 实验六 题目一 一、分析下面的程序&#xff0c;写出其运行时的输出结果。上机运行该程序&#xff0c;观察运行…

[附源码]计算机毕业设计ssm新能源电动汽车充电桩服务APP

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

ROS action客户端和服务端通信(Ubuntu )

ROS action客户端和服务端通信 gcusms ROS 一般都是用 service 和 topic 进行数据之间的交互传输&#xff0c;因为这种通信方式无法满数据实时反馈的要求&#xff0c;所以采用 action 动作消息反馈通信机制&#xff08;实时反馈的任务进度&#xff0c;并且可以随时终止运行&am…

用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (6)-在线调试

AWPLC 目前还处于开发阶段的早期&#xff0c;写这个系列文章的目的&#xff0c;除了用来验证目前所做的工作外&#xff0c;还希望得到大家的指点和反馈。如果您有任何疑问和建议&#xff0c;请在评论区留言。 1. 背景 AWTK 全称 Toolkit AnyWhere&#xff0c;是 ZLG 开发的开源…

vuex学习记录

为什么要用vuex 由于vue本身的特点。及页面是由多个组件构成。而组件又呈现一个二叉树状态。然后父向子需要进行通信。那如果是非父子关系&#xff0c;应该如何传值呢&#xff1f; 什么是vuex 专门为vue.js应用程序开发的状态管理模式。它采用集中式存储管理数据&#xff0c…

详解 Go 语言中的 init () 函数

阅读目录Go init 函数的详细说明包初始化Go init 函数的详细说明 初始化每个包后&#xff0c;会自动执行 init&#xff08;&#xff09;函数&#xff0c;并且执行优先级高于主函数的执行优先级。 init 函数通常用于&#xff1a; 变量初始化检查 / 修复状态注册器运行计算 包…

c语言零基础入门(完整版)

1软件下载 官网下载: https://sourceforge.net/projects/orwelldevcpp/ 百度网盘&#xff1a;https://pan.baidu.com/s/1mhHDjO8 提取密码&#xff1a;mken 推荐用百度网盘&#xff0c;官方下载太慢了 开始安装 首先双击打开刚刚下载的软件 点击0k 因为在安装过程中不能使用…

【计算机视觉】图像形成与颜色

图像形成与颜色 光照及阴影 辐射度学 颜色 颜色信息反映了入射光的能量分布与波长&#xff0c;可见光的波长在400nm到760nm之间。 RGB RGB分别代表三个基色&#xff08;R-红色、G-绿色、B-蓝色&#xff09;&#xff0c;如(0,0,0)表示黑色、(255, 255, 255)表示白色。其中2…

TS装饰器bindThis优雅实现React类组件中this绑定

初学React类组件时&#xff0c;最不爽的一点应该就是 this 指向问题了吧&#xff01;初识React的时候&#xff0c;肯定写过这样错误的demo。 import React from react; export class ReactTestClass extends React.Component {constructor(props) { super(props); this.state …

程序员如何进化成架构师?

作为程序员的上端&#xff0c;每一个架构师都承担着艰巨的任务&#xff1a;不仅仅要和产品进行周旋&#xff0c;还需要有十分坚实的技术作为基础打底。 那么&#xff0c;架构师都在考虑什么呢&#xff1f; 说到底还是程序架构、结构性的问题。 比如最近十分火爆的分布式系统…

STM32CubeIDE(stm32f767)添加DSP库

对于stm32f4 系列可以使用STM32Cube添加相应的库&#xff0c;自动生成代码。可以参考下面写的文章 (1条消息) STM32CubeMX关于添加DSP库的使用_W_oilpicture的博客-CSDN博客_cubemx dsp库 不过&#xff0c;对于stm32f767等M7的内核目前可能并不适用&#xff0c;需要自己手动添…

CS162 shell

本文记录我在做shell这个作业时用到有关资源&#xff0c;如Linux系统调用、Linux基础知识、C语言知识等。 这里只是非常简略地记录了一下&#xff0c;并且可能有理解不正确的地方&#xff0c;你可以把本文当作一个索引和没有思路时的启发&#xff0c;详细的信息可以再去查&…

SVM(支持向量机)基本形式推导

据说在dl之前是SVM撑起了ml的半片天&#xff0c;学习后发现SVM是由纯粹的数学推导、转化、求解、优化“堆砌”而来&#xff0c;不如说是数学撑起了ml&#xff0c;ml是数学的学科。以下根据老师ppt上讲解的思路讲讲个人对SVM基本形式推导的理解。 margin&#xff08;间隔&#x…

[附源码]计算机毕业设计现代诗歌交流平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2. IMU原理及姿态融合算法详解

文章目录2. IMU原理及姿态融合算法详解一、组合二、 原理a) 陀螺仪b) 加速度计c) 磁力计三、 旋转的表达a) 欧拉角b) 旋转矩阵c) 四元数d) 李群 SO(3)\text{SO}(3)SO(3) 及 李代数 so(3)\text{so}(3)so(3)四、 传感器的噪声及去除a) 陀螺仪b) 加速度计c) 磁力计五、姿态解算原理…

CSS基础-选择器进阶,背景相关属性(颜色/图片)

CSS基础-选择器进阶,背景相关属性(颜色/图片) 目标&#xff1a;能够理解 复合选择器 的规则&#xff0c;并使用 复合选择器 在 HTML 中选择元素 学习路径&#xff1a;1. 复合选择器2. 并集选择器3. 交集选择器4. hover伪类选择器5. Emmet语法 本次我们所学的内容&#xff1a; 1…

Kafka - 15 Kafka Offset | 自动和手动提交Offset | 指定Offset消费 | 漏消费和重复消费 | 消息积压

文章目录1. Offset 的默认维护位置2. 自动提交 Offset3. 手动提交 Offset1. 同步提交 offset2. 异步提交 offset4. 指定 Offset 消费5. 指定时间消费6. 漏消费和重复消费7. 消费者事务8. 数据积压&#xff08;消费者如何提高吞吐量&#xff09;1. Offset 的默认维护位置 Kafka…

触发器——SR锁存器

组合逻辑的基本单元电路是门电路 另外一种电路叫做时序逻辑电路&#xff0c;时序逻辑电路的输出不但和输入有关&#xff0c;还和原来的状态有关 在这样的电路中&#xff0c;一定要具有存储功能&#xff0c;存储原来的状态&#xff0c;一定也要有反馈回路&#xff0c;返回原来…