Elastic-Job任务重复执行问题解决

作者: 尹吉欢 | 来源:发表于2017-12-15 09:28 被阅读76次

关于Elastic-Job的使用和介绍请查看我之前的文章 房价网是怎么使用分布式作业框架elastic-job

当前使用的版本是:2.1.5

最近在重新发布任务代码时出现了一个很诡异的问题,就是我重启任务程序后,大概1分钟左右吧,之前执行过的任务又重新执行了一遍,我那些任务都是凌晨跑的,我中午重启程序,居然全部执行了一遍。

虽然这个不影响使用,因为我的作业都支持幂等操作,但是好奇心驱使我去解决这个问题。

首先说说排查问题的思路:

1.这个问题肯定不是定时时间的问题,时间配置的都是凌晨,而且平时也都正常,所以这点可以排除

2.在配置中只有一个值得怀疑,那就是失效转移failover="true" .如果在任务执行过程中有一个执行实例挂了,那么之前被分配到这个实例的任务(或者分片)会在下次任务执行之前被重新分配到其他正常节点实例上执行。

3.顺着这个思路,我把失效转移关闭了,然后重启程序,果然正常了。

4.但是失效转移是一个很有用的特性,如果去掉的话那么万一任务执行过程中发生异常,不就不能容错了吗,还是需要开启的,但是要从另外的方向去思考为什么会触发失效转移这个逻辑。

5.由于我是直接将程序停止,然后马上启动,中间没有间隔时间,于是我先停掉程序,然后等ZK中instances下的实例信息失效之后再重启程序,果然正常了。

我大概的猜测是当instances下的实例还没失效,然后我们又启动了一个,这个时候instances下就有2个实例了,当之前停止的一个实例节点失效的时候,我们重起的那个程序会监听zk的instance节点删除事件,然后触发失效转移。

至于真正的原因还是得看源码哈,我上面只是猜测,后面有时间再去调试然后跟大家分享下。

相关文章

  • Elastic-Job任务重复执行问题解决

    关于Elastic-Job的使用和介绍请查看我之前的文章 房价网是怎么使用分布式作业框架elastic-job 当...

  • elastic-job源码浅析(任务执行过程)

    1.启动过程流程图 流程图详细地描述了各个作业细节的执行过程,看上去流程非常复杂,其主要的功能点为:判断作业是否可...

  • 【celery】任务重复执行

    问题 celery定时任务里面启用延时任务,出现延时任务重复执行的问题。如:定时任务: project_statu...

  • Spring Cloud Stream 使用延迟消息实现定时任务

    应用场景 我们在使用一些开源调度系统(比如:elastic-job等)的时候,对于任务的执行时间通常都是有规律性的...

  • 分布式调度引擎elastic-job源码分析(三)-作业执行ba

    elastic-job 作业执行是分片执行,支持错过重调度,重叠执行转错过重调度,作业运行节点下线的失效转移,服务...

  • SpringBoot使用Elastic-Job

    本文介绍SpringBoot整合Elastic-Job分布式调度任务(简单任务)。 1.有关Elastic-Job...

  • 分布式设计

    1.定时任务数据task,有执行机器地址字段,这样防止了任务被重复执行,也做到了分布式执行的效果,执行压力负载均衡...

  • 与时间作朋友读书笔记

    无论是学习、工作还是生活,我们面临的任务大都是重复性的。要想加快执行重复性任务的速度,只需在遇到重复性任务时先将...

  • 预演、总结、程序、提升

    针对工作、生活中重复性的任务,要想加快执行重复性任务的速度,只需在遇到重复性任务时现将其做完一次,然后马上总结、整...

  • Java 定时器

    Java 定时器 1. 概述 Timer 可以按计划执行重复的任务或者定时执行指定任务,这是因为 Timer 内部...

网友评论

    本文标题:Elastic-Job任务重复执行问题解决

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