elastic job 问题汇总

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elastic job 问题汇总相关的知识,希望对你有一定的参考价值。

参考技术A 小军和我说  AbstractDistributeOnceElasticJobListener 的 doAfterJobExecutedAtLastCompleted 方法 在使用中有些问题。

elastic job 其实是 分布式定时任务调度框架 ,git 地址: https://github.com/elasticjob

公司使用的是 elastic-job-lite 的2.1.5 版 ,

git 地址:   https://github.com/elasticjob/elastic-job-lite/releases/tag/2.1.5

以下问题以及源码分析 基于2.1.5 版

发现问题如下 :

问题1  官方文档中 AbstractDistributeOnceElasticJobListener 在分布式作业中只执行一次的监听器, Listener 中 doAfterJobExecutedAtLastCompleted 在job 完成后 会只执行一次 , 实际上 5,15s  调度时间 中 测试中 , 3个实例 ,执行了 两次 甚至三次  。 也就是说 doAfterJobExecutedAtLastCompleted 业务逻辑 最好 能保持幂等  ,如果不 幂等 , 会有多次 执行的问题 。后面的源码解析 Elastic job - doAsfterJobExecutedAtLastComplete...  会给出答案 ,问题如下

  实例1

  实例2

doAfterJobExecutedAtLastCompleted 在实例1 ,实例2  简单输出了 ---end---    执行了 两次 

问题2   当某一实例任务的 执行时间 大于AbstractDistributeOnceElasticJobListener 的  completedTimeoutMilliseconds ,其余完成实例会报超时异常 , 

     比如 3实例 有2实例 完成了 , 第三实例 超时了 ,这时候 完成两实例 会报超时异常  如下

   当次 任务 的  doAfterJobExecutedAtLastCompleted 方法是否 会执行呢  。测试中 没有执行 ,但是 也有可能 会执行 。  后面的源码 解析 Elastic job - doAsfterJobExecutedAtLastComplete...  会给出答案

问题3 当某一实例 挂掉时候 ,集群的leader 会报异常(这个是使用了内嵌zk 原因)  ,当job完成的时候 , 只会重新分片 

    如果 job没有完成 类似于 问题2 , leader 报异常后 会报超时异常 ,后面源码解析会给出答案

问题 4  任务出现了补偿 机制 , 简单说 2 s调度 执行一次任务 。 任务 执行一次需3s , 那么 ,会在当前调度过程中 ,执行 补偿的下次任务调度 。 如下 ,一次调度中 执行了两次   ,具体实现 可以看源码解析

问题 5 多次注册listener 爆出 异常 这个应该使用问题 。

以上是关于elastic job 问题汇总的主要内容,如果未能解决你的问题,请参考以下文章

遇见问题汇总

Spring+quartz 实现定时任务job集群配置

Hive性能优化(全面)

Quartz框架汇总

[收藏]Hive性能优化(全面)

jenkins报错汇总