如何控制Dolphinscheduler同一任务不能同时执行多个

Dolphinscheduler架构

如何控制Dolphinscheduler同一任务不能同时执行多个_第1张图片

架构说明

  • MasterServer

    MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态。 MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。(有点类似于hbase master)

    该服务内主要包含:
    • Distributed Quartz分布式调度组件,主要负责定时任务的启停操作,当quartz调起任务后,Master内部会有线程池具体负责处理任务的后续操作

    • MasterSchedulerThread是一个扫描线程,定时扫描数据库中的 command 表,根据不同的命令类型进行不同的业务操作
       

          @Override
          public void run() {
              logger.info("master scheduler started");
              while (Stopper.isRunning()){
                  InterProcessMutex mutex = null;
                  try {
                      boolean runCheckFlag = OSUtils.checkResource(masterConfig.getMasterMaxCpuloadAvg(), masterConfig.getMasterReservedMemory());
                      if(!runCheckFlag) {
                          Thread.sleep(Constants.SLEEP_TIME_MILLIS);
                          continue;
                      }
                      if (zkMasterClient.getZkClient().getState() == CuratorFrameworkState.STARTED) {
      
                          mutex = zkMasterClient.blockAcquireMutex();
      
                          int activeCount = masterExecService.getActiveCount();
                          // make sure to scan and delete command  table in one transaction
                          Command command = processService.findOneCommand();
                          if (command != null) {
                              logger.info("find one command: id: {}, type

你可能感兴趣的:(java,spring,cloud)