DolphinScheduler-10: quartz
之前讲工作流的启动,源头是t_ds_command表,这篇笔记讲讲该表数据是如何写入的,也就是 Crontab 的生效过程。
1. quartz
简单的 crontab 实现方式很多,java.util.Timer、spring @Scheduled、akka scheduler etc.。 quartz1也是一个调度框架,可以集成在 java 程序里,好处是持久化和分布式。
我觉得 quartz 里最重要的概念有三个:
JobDetail: 用户继承该基类实现自己的任务类,执行具体任务
Trigger: 任务触发器,比如一次性触发、Crontab 触发等
Scheduler: 调度器,接收 JobDetail,按照 Trigger 调度
JobBuilder...
DolphinScheduler-9: 容错
1. 容错的必要性
分布式系统使用集群提高了算力,也天然需要面对和解决单机不稳定的问题,比如常说的宕机、掉盘、网络抖动等。
Jeff Dean 多年前在斯坦福有过一个分享1,其中一些数字我觉得应该是架构谨记的:
Typical first year for a new cluster:
~1 network rewiring (rolling ~5% of machines down over 2-day span)
~20 rack failures (40-80 machines instantly disappear, 1-6 hours to get back)
~5 racks go wonky (40-80 machines see 50% packet...
DolphinScheduler-8: 状态
在工作流的生命周期里,初步介绍过工作流的各种状态。
1. 状态机
如果我们实现一个任务调度系统,首要是梳理清楚任务状态。
以 Flink 任务流程为例:
提交:任务提交后,资源调度需要分配资源、初始化Container、启动JobManager、TaskManager等。因此任务首先是从初始化到提交中,再从提交成功到运行,当然任务也有可能因为各种原因导致提交失败。
运行:运行中的任务,可能会成功,可能会失败,对流式任务,也有可能一直是运行。
停止:任务在任何一个状态,都可能会收到停止的事件,同理会先变成停止中,再变成已停止,如果停止失败,那回到原来的状态。
这个流程包含三元素:
状态:初始化、提交中、运行、成功、失败、已停止,都是任务的状态
事件...
DolphinScheduler-7: 网络模型
DolphinScheduler 使用 Netty 作为网络框架,实现 Master Worker 模块间的 RPC 通信。这篇笔记介绍 DolphinScheduler 基础的网络模型,以及是如何使用 Netty 的。
1. Netty 简介
Netty 是 java 一款高性能的通信框架,使用上跟 C++ RPC 库很像,不像 akka 过于抽象和简洁。
Netty-Server 需要定义两个 NioEventLoopGroup 的线程组,一组用于接受 Client 的连接,一组用于 socket 的网络读写。通过 ServerBootStrap 辅助类,注册 handle 处理链,监听指定端口。
Netty-Client 需要定义一个 NioEventLoopGroup ...
235 post articles, 30 pages.