Elastic-Job任务重复执行问题解决
来源:互联网 发布:ai软件下载中文版 mac 编辑:程序博客网 时间:2024/04/29 18:22
关于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
- Elastic-Job - 分布式定时任务框架
- Elastic-Job - 分布式定时任务框架
- Elastic-Job - 分布式定时任务框架
- Elastic-Job - 分布式定时任务框架
- Elastic-Job - 分布式定时任务框架
- 分布式定时任务框架-Elastic Job
- Elastic-Job - 分布式定时任务框架
- elastic-job动态添加定时任务
- 分布式定时任务——elastic-job
- Elastic-Job-Lite 源码阅读 ---- 任务初始化
- Elastic-Job-Lite 源码阅读 ---- 作业执行
- Elastic-JOB
- Elastic-Job
- Elastic job
- 数据库优化问题详解
- Linux下编译caffe报错catastrophic error: error while writing generated C++ file: No space left on device
- Linux下编译caffe报错catastrophic error: error while writing generated C++ file: No space left on device
- 落单的数
- 网络基础知识梳理
- Elastic-Job任务重复执行问题解决
- win8电脑调整分区后分区丢失的资料怎么找回
- Leetcode Longest Common Prefix 解题报告
- 【编程网格无水题】之【最短歧义串】
- 进程同步与互斥之经典问题二
- (前端)警告:Synchronous XMLHttpRequest on the main thread is deprecated
- 直播与虚拟直播
- BZOJ 3858: Number Transformation
- TensorFlow 变量初始化函数