ltsopensource / light-task-scheduler

Distributed Scheduled Job Framework
Apache License 2.0
3.01k stars 1.15k forks source link

JobTracker集群时差导致Cron任务重复触发 #330

Open xionghan00 opened 7 years ago

xionghan00 commented 7 years ago

版本 1.6.9 JobTracker个数:2 任务类型:Cron-依赖上一周期

当前逻辑: 当TaskTracker完成任务后,随机选择一个JobTracker返回JobRunResult,JobTracker会根据当前服务器时间产生下一次触发任务。

场景: 假设JobTracker-1在 10:00(JobTracker-1的服务器时间)分发cron任务,task-tracker迅速完成任务并返回至JobTracker-2,而此时JobTracker-2的服务器时间为09:59。这样JobTracker-2计算出的下一个触发时间点依然是10:00,那么该cron任务在10:00时间点会被触发多次。

这个问题是否有办法规避?或者属于bug,需要修复?

lusong1986 commented 7 years ago

只能保证两个jobtracker的服务器时间一致,尽量少的差别,我也碰到过这个问题。 或者使用分布式锁,保证在一个固定的时间内(如1s),只有一个jobtracker能派发任务。

Dorae132 commented 6 years ago

这种情况确实会出现