【故障排查】10分钟解决Quartz重复调度的疑难杂症

💡 原文中文,约15200字,阅读约需36分钟。
📝

内容提要

本文介绍了使用Apache DolphinScheduler作为调度结构时,解决Quartz重复调度问题的过程。通过排查日志和分析数据库的锁记录,发现问题是由于Tidb数据库在RR隔离级别下,读取的是之前的Read View导致的。解决方案是切换到Mysql数据库或将Tidb数据库更改为RC隔离级别。

🎯

关键要点

  • 使用Apache DolphinScheduler作为调度结构时,出现Quartz重复调度问题。

  • 问题源于Tidb数据库在RR隔离级别下读取的是之前的Read View。

  • Quartz的底层调度结构导致同名同调度任务被执行两次。

  • 通过排查日志和数据库锁记录,确认问题是Quartz引起的。

  • 建议的解决方案是切换到Mysql数据库或将Tidb数据库更改为RC隔离级别。

延伸问答

Quartz重复调度问题的原因是什么?

Quartz重复调度问题源于Tidb数据库在RR隔离级别下读取的是之前的Read View。

如何确认Quartz重复调度是由什么引起的?

通过排查日志和分析数据库的锁记录,确认是Quartz引起的重复调度。

解决Quartz重复调度问题的建议是什么?

建议切换到Mysql数据库或将Tidb数据库更改为RC隔离级别。

在使用Apache DolphinScheduler时,Quartz的底层调度结构是什么?

Quartz的底层调度结构是QRTZ_TRIGGERS和QRTZ_FIRED_TRIGGERS表。

为什么Tidb和Mysql在RR隔离级别下的行为不同?

Tidb在开启事务时会立即创建Read View,而Mysql在同一事务中的第一个快照读才会创建Read View。

如何通过日志排查Quartz重复调度的问题?

可以通过开启MVCC日志和全量日志,分析QRTZ_TRIGGERS和QRTZ_FIRED_TRIGGERS表的记录来排查问题。

➡️

继续阅读