作者 | 李杰 移动云,Apache DolphinScheduler贡献者

在现代数据驱动的企业中,工作流调度系统是数据管道(Data Pipeline)的“中枢神经”。从 ETL 任务到机器学习训练,从报表生成到实时监控,几乎所有关键业务都依赖于一个稳定、高效、易扩展的调度引擎。
笔者认为Apache DolphinScheduler 3.1.9是稳定且广泛使用的版本,故本文将聚焦于这一版本,解析 Master 服务启动时相关流程,深入其源码核心,剖析其架构设计、模块划分与关键实现机制,帮助开发者理解 Master “如何工作”,并为进一步二次开发或性能优化打下基础。
本系列文章分为 3 个部分,分别为 Master Server 启动流程、Worker server 启动流程,以及相关流程图,本文为第一部分。
1. Master Server启动核心概览
- 代码入口:org.apache.dolphinscheduler.server.master.MasterServer#run
public void run() throws SchedulerException {
// 1、init rpc server
this.masterRPCServer.start();
// 2、install task plugin
this.taskPluginManager.loadPlugin();
// 3、self tolerant
this.masterRegistryClient.start();
this.masterRegistryClient.setRegistryStoppable(this);
// 4、master 调度
this.masterSchedulerBootstrap.init();
this.masterSchedulerBootstrap.start();
// 5、事件执行服务
this.eventExecuteService.start();
// 6、容错机制
this.failoverExecuteThread.start();
// 7、Quartz调度
this.schedulerApi.start();
...
}
1.1 rpc启动:
- 描述:注册相关命令的process处理器,如task执行中、task执行结果、终止task等。
- 代码入口:org.apache.dolphinscheduler.server.master.rpc.MasterRPCServer#start
public void start() {
...
// 任务执行中的请求处理器
this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_RUNNING, taskExecuteRunningProcessor);
// 任务执行结果的请求处理器
this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_RESULT, taskExecuteResponseProcessor);
// 任务终止的请求处理器
this.nettyRemotingServer.registerProcessor(CommandType.TASK_KILL_RESPONSE, taskKillResponseProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.STATE_EVENT_REQUEST, stateEventProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.TASK_FORCE_STATE_EVENT_REQUEST, taskEventProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.TASK_WAKEUP_EVENT_REQUEST, taskEventProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.CACHE_EXPIRE, cacheProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.TASK_REJECT, taskRecallProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.WORKFLOW_EXECUTING_DATA_REQUEST,
workflowExecutingDataRequestProcessor);
// 流式任务启动请求处理器
this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_START, taskExecuteStartProcessor);
// logger server
// log相关,查看或者获取日志等操作的处理器
this.nettyRemotingServer.registerProcessor(CommandType.GET_LOG_BYTES_REQUEST, loggerRequestProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.ROLL_VIEW_LOG_REQUEST, loggerRequestProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.VIEW_WHOLE_LOG_REQUEST, loggerRequestProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.REMOVE_TAK_LOG_REQUEST, loggerRequestProcessor);
this.nettyRemotingServer.start();
logger.info("Started Master RPC Server...");
}
1.2 任务插件初始化:
- 描述:task的相关模板操作,如创建task、解析task参数、获取task资源信息等。对于该插件,api、master、worker都需要进行注册,在master的作用是设置数据源和UDF信息等。
1.3 Self Tolerant(Master注册):
- 描述:将自身信息注册至注册中心(本文以zookeeper为例),同时监听自身、其他master和所有worker节点的注册情况变化,从而做相应的容错处理。
- 代码入口:org.apache.dolphinscheduler.server.master.registry.MasterRegistryClient#start
public void start() {
try {
this.masterHeartBeatTask = new MasterHeartBeatTask(masterConfig, registryClient);
// 1、将自身信息注册至注册中心;
registry();
// 2、监听自身与注册中心的连接情况;
registryClient.addConnectionStateListener(
new MasterConnectionStateListener(masterConfig, registryClient, masterConnectStrategy));
// 3、监听其他master与所有worker在注册中心的活跃情况,做相应的容错工作处理
// 如对灭亡的master上面的任务进行容错,同时将在worker节点上kill任务
registryClient.subscribe(REGISTRY_DOLPHINSCHEDULER_NODE, new MasterRegistryDataListener());
} catch (Exception e) {
throw new

最低0.47元/天 解锁文章
1224

被折叠的 条评论
为什么被折叠?



