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

在使用Elastic-Job 2.1.5版本时,发现任务在程序重启后约1分钟重复执行。经过排查,问题可能与失效转移有关。关闭失效转移后问题解决,但为了保持容错性,通过等待ZK中实例信息失效后再重启程序避免了问题。推测是实例信息未及时清除导致的失效转移触发。后续计划深入源码研究并分享详细原因。
摘要由CSDN通过智能技术生成

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

当前使用的版本是:2.1.5

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

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

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

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

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

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

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

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

我大概的猜测是当instances下的实例还没失效,然后我们又启动了一个,这个时

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值