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

在现代数据驱动的企业中,工作流调度系统是数据管道(Data Pipeline)的“中枢神经”。从 ETL 任务到机器学习训练,从报表生成到实时监控,几乎所有关键业务都依赖于一个稳定、高效、易扩展的调度引擎。
笔者认为 Apache DolphinScheduler 3.1.9 是稳定且广泛使用的版本,故本系列文章将深入其源码核心,剖析其架构设计、模块划分与关键实现机制,帮助开发者理解 Master 和 Worker “如何工作”,并为进一步二次开发或性能优化打下基础。
我们之前解读了 Apache DolphinScheduler 3.1.9版本源码的 Master server 启动流程,感兴趣的可以去查看。本文是 Apache DolphinScheduler 3.1.9 版本源码解读的第二篇:Worker Server 启动流程源码解读以及相关流程设计。结尾处附有相关流程图,供大家参考。
2. Worker Server启动核心概览
- 代码入口:org.apache.dolphinscheduler.server.worker.WorkerServer#run
public void run() {
// 1. rpc启动
this.workerRpcServer.start();
// 忽略,因为workerRpcServer初始化时包含workerRpcClient初始化的功能
this.workerRpcClient.start();
// 2. 任务插件初始化
this.taskPluginManager.loadPlugin();
this.workerRegistryClient.setRegistryStoppable(this);
// 3. worker 注册
this.workerRegistryClient.start();
// 4. worker管理线程,不断从任务队列中waitSubmitQueue领取任务,提交到线程池处理
this.workerManagerThread.start();
// 5. 消息重试线程。负责轮询通过RPC发送服务,如当task在运行中,若未收到master的ack信息,会周期给master发送“运行中”信号
this.messageRetryRunner.start();
...
}
2.1 rpc启动:
- 描述:注册相关命令的process处理器,如接收任务请求、停止任务请求等。
- 代码入口:org.apache.dolphinscheduler.server.worker.rpc.WorkerRpcServer#start
public void start() {
LOGGER.info("Worker rpc server starting");
NettyServerConfig serverConfig = new NettyServerConfig();
serverConfig.setListenPort(workerConfig.getListenPort());
this.nettyRemotingServer = new NettyRemotingServer(serverConfig);
// 接收派发任务请求。然后将任务放置到任务队列waitSubmitQueue中,等待workerManagerThread去处理
this.nettyRemotingServer.registerProcessor(CommandType.TASK_DISPATCH_REQUEST, taskDispatchProcessor);
// 停止任务请求
this.nettyRemotingServer.registerProcessor(CommandType.TASK_KILL_REQUEST, taskKillProcessor);
// 接收任务运行中的ack请求
this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_RUNNING_ACK,
taskExecuteRunningAckProcessor);
// 接收任务结果的ack请求
this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_RESULT_ACK, taskExecuteResultAckProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.TASK_REJECT_ACK, taskRejectAckProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.PROCESS_HOST_UPDATE_REQUEST, hostUpdateProcessor);
this.nettyRemotingServer.registerProcessor(CommandType.TASK_SAVEPOINT_REQUEST, taskSavePointProcessor);
// logger server
this.nettyRemotingServer.registerProcessor(CommandType.GET_APP_ID_REQUEST, logger

最低0.47元/天 解锁文章
143

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



