运维平台

elastic-job-lite-console-${version}.tar.gz可通过mvn install编译获取,下载源码,进入console目录,执行:

mvn clean install -Dmaven.test.skip=true 

解压缩elastic-job-lite-console-${version}.tar.gz并执行bin\start.sh。打开浏览器访问http://localhost:8899/即可访问控制台。8899为默认端口号,可通过启动脚本输入-p自定义端口号。

提供两种账户,管理员及访客,管理员拥有全部操作权限,访客仅拥有察看权限。默认管理员用户名和密码是root/root,访客用户名和密码是guest/guest,可通过conf\auth.properties修改管理员及访客用户名及密码。

  • 登录安全控制

  • 注册中心、事件追踪数据源管理

  • 快捷修改作业设置

  • 作业和服务器维度状态查看

  • 操作作业禁用\启用、停止和删除等生命周期

  • 事件追踪查询

添加作业 作业在首次运行时将自动添加。Elastic-Job-Lite以jar方式启动,并无作业分发功能。如需完全通过运维平台发布作业,请使用Elastic-Job-Cloud。

JavaCode配置

注册中心配置

属性名 类型 构造器注入 缺省值 描述
serverLists String   连接Zookeeper服务器的列表
包括IP地址和端口号
多个地址用逗号分隔
如: host1:2181,host2:2181
namespace String   Zookeeper的命名空间
baseSleepTimeMilliseconds int 1000 等待重试的间隔时间的初始值
单位:毫秒
maxSleepTimeMilliseconds String 3000 等待重试的间隔时间的最大值
单位:毫秒
maxRetries String 3 最大重试次数
sessionTimeoutMilliseconds boolean 60000 会话超时时间
单位:毫秒
connectionTimeoutMilliseconds boolean 15000 连接超时时间
单位:毫秒
digest String   连接Zookeeper的权限令牌
缺省为不需要权限验证

 

作业配置

作业配置分为3级,分别是JobCoreConfiguration,JobTypeConfiguration和LiteJobConfiguration。LiteJobConfiguration使用JobTypeConfiguration,JobTypeConfiguration使用JobCoreConfiguration,层层嵌套。 JobTypeConfiguration根据不同实现类型分为SimpleJobConfiguration,DataflowJobConfiguration和ScriptJobConfiguration。

JobCoreConfiguration:

属性名 类型 构造器注入 缺省值 描述
jobName String   作业名称
cron String   cron表达式,用于控制作业触发时间
shardingTotalCount int   作业分片总数
shardingItemParameters String   分片序列号和参数用等号分隔,多个键值对用逗号分隔
分片序列号从0开始,不可大于或等于作业分片总数
如:
0=a,1=b,2=c
jobParameter String   作业自定义参数
作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业
例:每次获取的数据量、作业实例从数据库读取的主键等
failover boolean false 是否开启任务执行失效转移,开启表示如果作业在一次任务执行中途宕机,允许将该次未完成的任务在另一作业节点上补偿执行
misfire boolean true 是否开启错过任务重新执行
description String   作业描述信息
jobProperties Enum   配置jobProperties定义的枚举控制Elastic-Job的实现细节
JOB_EXCEPTION_HANDLER用于扩展异常处理类
EXECUTOR_SERVICE_HANDLER用于扩展作业处理线程池类

SimpleJobConfiguration:

属性名 类型 构造器注入 缺省值 描述
coreConfig JobCoreConfiguration    
jobClass String   作业实现类,需实现ElasticJob接口

DataflowJobConfiguration:

属性名 类型 构造器注入 缺省值 描述
coreConfig JobCoreConfiguration    
jobClass String   作业实现类,需实现ElasticJob接口
streamingProcess boolean false 是否流式处理数据
如果流式处理数据, 则fetchData不返回空结果将持续执行作业
如果非流式处理数据, 则处理数据完成后作业结束

ScriptJobConfiguration:

属性名 类型 构造器注入 缺省值 描述
coreConfig JobCoreConfiguration    
scriptCommandLine String   脚本型作业执行命令行

LiteJobConfiguration:

属性名 类型 构造器注入 缺省值 描述
jobConfig JobTypeConfiguration    
monitorExecution boolean true 监控作业运行时状态
每次作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率。因为是瞬时状态,所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取,应在作业中实现幂等性。
每次作业执行时间和间隔时间均较长的情况,建议监控作业运行时状态,可保证数据不会重复选取。
monitorPort int -1 作业监控端口
建议配置作业监控端口, 方便开发者dump作业信息。
使用方法: echo “dump” | nc 127.0.0.1 9888
maxTimeDiffSeconds int -1 最大允许的本机与注册中心的时间误差秒数
如果时间误差超过配置秒数则作业启动时将抛异常
配置为-1表示不校验时间误差
jobShardingStrategyClass String -1 作业分片策略实现类全路径
默认使用平均分配策略
详情参见:作业分片策略
reconcileIntervalMinutes int 10 修复作业服务器不一致状态服务调度间隔时间,配置为小于1的任意值表示不执行修复
单位:分钟
eventTraceRdbDataSource String   作业事件追踪的数据源Bean引用

作业分片策略

AverageAllocationJobShardingStrategy

居于平均分配算法的分片策略,也是默认的分片策略。如果分片不能整除,则不能整除的分片将依次追加到序号小的服务器。

缺点:一旦分片数小于作业服务器数,作业将永远分配至IP地址靠前的服务器,导致IP地址靠后的服务器空闲。

OdevitySortByNameJobShardingStrategy

根据作业名称的哈希值奇数偶数决定IP升降序算法的分片策略。作业名的哈希值为奇数则IP升序,作业名的哈希值为偶数则IP降序。用于不同的作业平均分配负载至不同的服务器。

RotateServerByNameJobShardingStrategy

根据作业名的哈希值对服务器列表进行轮转的分片策略。

自定义分片策略

实现JobShardingStrategy接口并实现sharding方法,接口方法参数为作业服务器IP列表和分片策略选项,分片策略选项包括作业名称,分片总数以及分片序列号和个性化参数对照表,可以根据需求定制化自己的分片策略。

事件追踪

通过事件订阅的方式处理调度过程中的重要事件,用于查询、统计和监控,基于关系型数据库。一般对作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率。

    // 初始化数据源
DataSource dataSource = ...;
// 定义日志数据库事件溯源配置
JobEventConfiguration jobEventRdbConfig = new JobEventRdbConfiguration(dataSource);
// 初始化注册中心
CoordinatorRegistryCenter regCenter = ...;
// 初始化作业配置
LiteJobConfiguration liteJobConfig = ...;
new JobScheduler(regCenter, liteJobConfig, jobEventRdbConfig).init();

登陆console管理端,可以查询:

DUMP作业运行信息

生产环境调试,方便开发者debug:

public class JobMain {
public static void main(final String[] args) {
// ...
jobConfig.setMonitorPort(9888);
// ...
}
}

命令:

echo "dump" | nc <任意一台作业服务器IP> 9888
echo "dump" | nc <任意一台作业服务器IP> 9888 > job_debug.txt

作业监听器

每台作业节点均执行的监听

定义监听器:

public class MyElasticJobListener implements ElasticJobListener {

    @Override
public void beforeJobExecuted(ShardingContexts shardingContexts) {
// do something ...
} @Override
public void afterJobExecuted(ShardingContexts shardingContexts) {
// do something ...
}
}

将监听器作为参数传入JobScheduler:

public class JobMain {

    public static void main(String[] args) {
new JobScheduler(createRegistryCenter(), createJobConfiguration(), new MyElasticJobListener()).init();
} private static CoordinatorRegistryCenter createRegistryCenter() {
CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("zk_host:2181", "elastic-job-demo"));
regCenter.init();
return regCenter;
} private static LiteJobConfiguration createJobConfiguration() {
// 创建作业配置
...
}
}

分布式场景中仅单一节点执行的监听

定义监听器:

public class TestDistributeOnceElasticJobListener extends AbstractDistributeOnceElasticJobListener {

    public TestDistributeOnceElasticJobListener(long startTimeoutMills, long completeTimeoutMills) {
super(startTimeoutMills, completeTimeoutMills);
} @Override
public void doBeforeJobExecutedAtLastStarted(ShardingContexts shardingContexts) {
// do something ...
} @Override
public void doAfterJobExecutedAtLastCompleted(ShardingContexts shardingContexts) {
// do something ...
}
}

将监听器作为参数传入JobScheduler:

public class JobMain {

    public static void main(String[] args) {
long startTimeoutMills = 5000L;
long completeTimeoutMills = 10000L;
new JobScheduler(createRegistryCenter(), createJobConfiguration(), new MyDistributeOnceElasticJobListener(startTimeoutMills, completeTimeoutMills)).init();
} private static CoordinatorRegistryCenter createRegistryCenter() {
CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("zk_host:2181", "elastic-job-demo"));
regCenter.init();
return regCenter;
} private static LiteJobConfiguration createJobConfiguration() {
// 创建作业配置
...
}
}

自诊断修复

分布式场景下,由于网络、时钟等原因,导致ZooKeeper的数据与真实运行的作业产生不一致,需要设置状态修复服务,指定间隔时间执行:

public class JobMain {
public static void main(final String[] args) {
// ...
LiteJobConfiguration.newBuilder(simpleJobConfig).reconcileIntervalMinutes(10).build();
// ...
}
}

Elastic Job入门(2) - 使用的更多相关文章

  1. Elastic search入门

    首先是下载elasticsearch https://www.elastic.co/downloads,解压: 然后下载了中文分析器ik,github上搜索elasticsearch-ik就能找到,h ...

  2. Elastic Job入门(1) - 简介

    介绍 构建一般的业务系统来说,使用Quartz或者Spring Task即可基本满足我们的单体服用应用需要.然而随着线上业务量的不断发展,这两种定时任务已经日渐无法满足我们的需求.一般,使用这两种定时 ...

  3. Elastic Job入门(3) - 集成Springboot

    引入pom文件 <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job ...

  4. DevOps on AWS之Elastic BeanStalk

    Elastic BeanStalk相关概念 童话世界中存在着一种魔力beanstalk(豆荚),种在花盆里可以无限的向上生长,越长越高直达云端.AWS Elastic Beanstalk也采用类似概念 ...

  5. 教你用Elastic Search:运行第一条Hello World搜索命令

    摘要:Elastic Search可实时对数据库进行全文检索.处理同义词.从同样的数据中生成分析和聚合数据. 本文分享自华为云社区<Elastic Search入门(一): 简介,安装,运行第一 ...

  6. Security:如何安装 Elastic SIEM 和 EDR

    转载自:https://elasticstack.blog.csdn.net/article/details/114023944 需要学习的地方:生成SSL证书 图片结合最下方的代码文字使用 last ...

  7. Filebeat中文指南

    Filebeat中文指南 翻译自:https://www.elastic.co/guide/en/beats/filebeat/current/index.html 译者:kerwin 鸣谢:tory ...

  8. 2-4、配置Filebeat使用logstash

    配置filebeat使用logstash 重要:要将事件发送到Logstash,还需要创建一个Logstash配置管道,该管道监听传入的Beats连接并将收到的事件编入索引到Elasticsearch ...

  9. Elastic 技术栈之快速入门

    Elastic 技术栈之快速入门 概念 ELK 是什么 ELK 是 elastic 公司旗下三款产品 ElasticSearch .Logstash .Kibana 的首字母组合. ElasticSe ...

随机推荐

  1. Java微信二次开发(五)

    消息加密 需要到入库:commons-io-2.4.jar,commons-codec-1.9.jar(在官网的Java微信加密demo下) 第一步:访问https://mp.weixin.qq.co ...

  2. React 组件库框架搭建

    前言 公司业务积累了一定程度,需要搭建自己的组件库,有了组件库,整个团队开发效率会提高恨多. 做组件库需要提供开发调试环境,和组件文档的展示,调研了几个比较主流的方案,如下: docz 配置简单,功能 ...

  3. 14.5 富文本编辑【JavaScript高级程序设计第三版】

    富文本编辑,又称为WYSIWYG(What You See Is What You Get,所见即所得).在网页中编辑富文本内容,是人们对Web 应用程序最大的期待之一.虽然也没有规范,但在IE 最早 ...

  4. 核化主成分分析(Kernel PCA)应用及调参

    核化这个概念在很多机器学习方法中都有应用,如SVM,PCA等.在此结合sklearn中的KPCA说说核函数具体怎么来用. KPCA和PCA都是用来做无监督数据处理的,但是有一点不一样.PCA是降维,把 ...

  5. MySQL中char、varchar和nvarchar的区别

    一.char和varchar的区别char是固定长度的,而varchar会根据具体的长度来使用存储空间,另外varchar需要用额外的1-2个字节存储字符串长度.1). 当字符串长度小于255时,用额 ...

  6. Ouroboros Snake POJ - 1392(数位哈密顿回路)

    看hdu 2894的题意  两个题一样 旋转鼓的表面分成m块扇形,如图所示(m=8).图中阴影区表示用导电材料制成,空白区用绝缘材料制成,终端a.b和c是3(k=3)处接地或不是接地分别用二进制信号0 ...

  7. 丢手帕问题 (约瑟夫问题)Java实现

    问题: 丢手帕游戏是约瑟夫问题的一个变种,游戏很简单,N个小孩围成一个圈,标号为1到N,从编号为m的小孩开始报数,报到第L个小孩退出游戏,然后下一个小孩继续从1开始报数,数到第L个小孩退出游戏,如此循 ...

  8. Centos6.5使用yum安装mysql

    0. 说明 先要查看yum源是否有你想要的mysql版本 yum list | grep mysql 如果没有则先要更新yum源 yum -y update 更新后即可进行下一步操作. 1. yum安 ...

  9. BellmanFord 最短路

    时间复杂度:O(VE) 最多循环V次,每次循环对每一条边(共E条边)判断是否可以进行松弛操作 最多V次:一个点的最短路,最多包含V-1个点(不包含该点), 如d1->d2->d3-> ...

  10. noip2013火柴排队_Solution

    要想对任意(ai,bi)和(aj­和b­j),当ai<aj时,都有bi<=bj:当ai>=aj时,bi>=bj,当对a进行升序排序后(b同时发生改变,从而不改变值,最后有a1& ...