美文网首页
elastic job 问题汇总

elastic job 问题汇总

作者: pcgreat | 来源:发表于2018-08-13 11:09 被阅读380次

    小军和我说  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 问题汇总

          本文链接:https://www.haomeiwen.com/subject/gmmybftx.html