文档章节

elasticJob分片跑批

 北极之北
发布于 2017/09/13 15:48
字数 761
阅读 64
收藏 0

业务迅速发展带来了跑批数据量的急剧增加。单机处理跑批数据已不能满足需要,另考虑到企业处理数据的扩展能力,多机跑批势在必行。多机跑批是指将跑批任务分发到多台服务器上执行,多机跑批的前提是”数据分片”。elasticJob通过JobShardingStrategy支持分片跑批。

跑批配置需要做如下修改: 
这里写图片描述

shardingTotalCount:作业分片总数。

jobShardingStrategyClass:作业分片策略实现类全路径,elasticJob默认提供了如下三种分片策略,AverageAllocationJobShardingStrategy : 基于平均分配算法的分片策略。 
OdevitySortByNameJobShardingStrategy:根据作业名的哈希值奇偶数决定IP升降序算法的分片策略。 
RotateServerByNameJobShardingStrategy:根据作业名的哈希值对服务器列表进行轮转的分片策略。 
默认使用AverageAllocationJobShardingStrategy。

shardingItemParameters:分片序列号和个性化参数对照表。 
分片序列号和参数用等号分隔, 多个键值对用逗号分隔。 
分片序列号从0开始, 不可大于或等于作业分片总数。 
分片的维度通常有状态(state)、类型(accountType)、id分区等,需要按照业务合适选取。

以上例,跑批服务器起了两台,192.168.30.38(测试跑批服务器)和10.15.83.211(本地服务)。 
作业分片总数为4,跑批服务器起了两台,根据AverageAllocationJobShardingStrategy ,每台服务器分到的分片是: 1=[0,1], 2=[2,3]。这可以在Elastic Job Console上作业列表中可以看出。 
这里写图片描述

本地服务器上也打印了shardingContext对象,以相互印证。

shardingContext:{"fetchDataCount":1,"jobName":"autoBidTransferLoanJob-1","jobParameter":"","monitorExecution":false,"offsets":{},"shardingItemParameters":{0:"NFM",1:"NFMF"},"shardingItems":[0,1],"shardingTotalCount":4}
  • 1

数据分片所需要做的,就是将shardingItemParameters作为参数传入查询跑批待处理数据列表的方法里,sql查询时增加一个动态in条件,例如:

 And accountType in (‘NFM’, ‘NFMF’)
  • 1

数据分片

分片方案

1、数据库层面,对业务主键进行取模

where mod(id, 4) in (1, 2)
  • 1

这种方式的问题是,在主键或者索引字段外套了一个函数,索引失效、全表扫描。改进方案是查询条件中再增加一个索引字段。

where mod(id, 4) in (1, 2) and create_date > sysdate - 1
  • 1

2、数据库层面,增加字段,在生成数据时,就为该行数据生成一个mod值。 
做分片的初衷就是跑批数据量越来越大、单台机器处理能力有限,通过扩展机器数来提升系统处理的能力。该mod值建议不要太小,至少要比分片项大。例如,生成的1000条数据的mod值只有0和1,而机器数加到了10,那最终只有两台机器在运行,造成资源浪费。当然,我们可以及时调整生成数据时的取模值,新生成的数据还是会分散到不同的机器上。

3、业务层面,选取状态(state)、类型(accountType)等字段作为分区维度。

本文转载自:

粉丝 8
博文 23
码字总数 17514
作品 0
深圳
私信 提问
源码分析ElasticJob任务错过机制(misfire)与幂等性

任务在调度执行中,由于某种原因未执行完毕,下一次调度任务触发后,在同一个Job实例中,会出现两个线程处理同一个分片上的数据,这样就会造成两个线程可能处理到相同的数据。为了避免同一条...

丁威
10/08
0
0
源码分析Elastic-Job前置篇二-基于Spring启动序列图与核心类图

本文主要目的:简单梳理了基于 Spring ElasticJob 的启动流程,从下文开始,将重点剖析 ElasticJob 的核心实现细节,例如选主、分片、失效转移机制等等。 1、在Spring中使用Elastic-Job的示例...

丁威
09/25
0
0
源码分析ElasticJob分片机制(带分片机制流程图)

本文将重点分析 ElasticJob 的分片机制: ElasticJob分片工作机制: ElasticJob在启动时,首先会启动是否需要重新分片的监听器。 代码见:ListenerManager#startAllListeners {...; shardin...

丁威
10/07
0
0
源码分析ElasticJob选主实现原理

ElasticJob各分布式调度服务器有两个角色:主服务器、从服务器。这里主从服务器与数据库的主从同步不一样,也不是传统意义上的主备,从执行调度任务这一视角来看ElasticJob主从服务器的地位是...

丁威
09/28
0
0
源码分析ElasticJob故障失效转移机制

本节将探讨ElasticJob故障失效转移机制。我们知道ElasticJob是一款基于Quartz的分布式任务调度框架,这里的分布式是数据的分布式,ElasticJob的核心设计理念是一个任务在多个节点上执行,每个...

丁威
10/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

实战项目-学成在线(七)

上传图片功能实现 在此之前,必须先了解FastDFS分布式文件系统,可以看之前的文章 文件服务系统实现对文件的上传、删除、查询等功能,各子系统不再开发上传文件等请求,各子系统通过文件系统...

lianbang_W
37分钟前
3
0
JVM -- Java堆结构及对象分代

Hello,今天记录下 Java虚拟机中的其中一个重点知识 --> Java堆。 一起学习,一起进步。继续沉淀,慢慢强大。希望这文章对您有帮助。若有写的不好的地方,欢迎评论给建议哈! 初写博客不久,...

猫狗熊
43分钟前
4
0
elastic-job的使用

概述: 公司用了elastic-job来执行定时任务和管理定时任务,所以最近研究了一下写了个demo,由于我是把zookeeper部署在了docker上的,所以这里简单介绍下docke的基础命令。 1、Docker基础命令...

你个小机灵鬼
44分钟前
4
0
Cadence Allegro 中skill应用教程:让代码替我们打工

SKILL语言是Candence提供给用户的一个开发接口,利用其本身提供的接口函数和SKILL语言完成自动化操作的功能。 怎么查看SKILL: 1.可以直接用写字板打开进行编辑或看功能说明。 2.想自己写或改...

demyar
45分钟前
4
0
如何看待技术债务

关于技术债务,做开发的同学对如下场景应该不陌生: 为了敢项目进度,详细设计、单元测试等过程就不写了,以后补 需求变化万千,原本架构设计无法满足新的需求,可是又不想动架构,于是绕过架...

嘿嘿嘿IT
46分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部