Elastic Job入门(2) - 使用
运维平台
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) - 使用的更多相关文章
- Elastic search入门
首先是下载elasticsearch https://www.elastic.co/downloads,解压: 然后下载了中文分析器ik,github上搜索elasticsearch-ik就能找到,h ...
- Elastic Job入门(1) - 简介
介绍 构建一般的业务系统来说,使用Quartz或者Spring Task即可基本满足我们的单体服用应用需要.然而随着线上业务量的不断发展,这两种定时任务已经日渐无法满足我们的需求.一般,使用这两种定时 ...
- Elastic Job入门(3) - 集成Springboot
引入pom文件 <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job ...
- DevOps on AWS之Elastic BeanStalk
Elastic BeanStalk相关概念 童话世界中存在着一种魔力beanstalk(豆荚),种在花盆里可以无限的向上生长,越长越高直达云端.AWS Elastic Beanstalk也采用类似概念 ...
- 教你用Elastic Search:运行第一条Hello World搜索命令
摘要:Elastic Search可实时对数据库进行全文检索.处理同义词.从同样的数据中生成分析和聚合数据. 本文分享自华为云社区<Elastic Search入门(一): 简介,安装,运行第一 ...
- Security:如何安装 Elastic SIEM 和 EDR
转载自:https://elasticstack.blog.csdn.net/article/details/114023944 需要学习的地方:生成SSL证书 图片结合最下方的代码文字使用 last ...
- Filebeat中文指南
Filebeat中文指南 翻译自:https://www.elastic.co/guide/en/beats/filebeat/current/index.html 译者:kerwin 鸣谢:tory ...
- 2-4、配置Filebeat使用logstash
配置filebeat使用logstash 重要:要将事件发送到Logstash,还需要创建一个Logstash配置管道,该管道监听传入的Beats连接并将收到的事件编入索引到Elasticsearch ...
- Elastic 技术栈之快速入门
Elastic 技术栈之快速入门 概念 ELK 是什么 ELK 是 elastic 公司旗下三款产品 ElasticSearch .Logstash .Kibana 的首字母组合. ElasticSe ...
随机推荐
- html 统一资源定位器(url)和url编码
url,即统一资源定位器,也叫网址. 点击<a>标签就会连接到url指定的服务器web资源,文档或者其它数据: url的命名规则:url可是域名或者IP地址 url="shcem ...
- python 模块之-re
就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹 ...
- BZOJ1195[HNOI2006]最短母串——AC自动机+BFS+状态压缩
题目描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. 输入 第一行是一个正整数n(n<=12),表示给定的字符串的 ...
- MT【26】ln(1+x)的对数平均放缩
评:1.某种程度上$ln(1+x)\ge \frac{2x}{2+x}$是最佳放缩. 2.这里涉及到分母为幂函数型的放缩技巧,但是不够强,做不了这题.
- python—— 写入错误UnicodeEncodeError的解决办法
在写python爬虫过程中,有时候吧结果写入到txt文件,但是会遇到UnicodeEncodeError. 错误原因—— 把文件内容,写入到文件中时,出错了. 而出错的原因其实是,python系统,在 ...
- [luogu1373]小a和uim之大逃离【动态规划】
传送门:https://www.luogu.org/problemnew/show/P1373 定义状态是:\(f[i][j][h][0..1]\)表示在\([i,j]\)两个人相差为h,让某一个人走 ...
- 监控(1)-企业常用服务监控shell
-----------------企业监控------------------------主动探测监控(“监控机”主动探测“被监控机”)HTTP服务器监控#!/bin/shLANG=C#被监控服务器. ...
- Linux监控--CPU、内存、I/O
CPU top命令能够实时监控系统的运行状态,并且可以按照CPU.内存和执行时间进行排序,同时top命令还可以通过交互式命令进行设定显示,通过top命令可以查看即时活跃的进行. 内存 free命令可以 ...
- Windows Boot Manager改成中文菜单
用管理员身份运行"命令提示符",依次执行以下命令 bcdedit /deletevalue {bootmgr} device bcdedit /deletevalue {bootm ...
- 洛谷 P3956 棋盘(BFS)
传送门:Problem P3956 https://www.cnblogs.com/violet-acmer/p/9827010.html 题解: BFS 相关变量解释: color[maxn][ma ...