几种大数据ETL工作流调度系统的介绍和对比
2. AZKABAN
Azkaban 是国外开源的一个工作流调度系统比较成熟。
先上一张架构图 :
主要有如下几种组件构成:
- Web Server : 主要包括工作流配置管理,用户认证,定时调度,触发任务执行功能
- Executor:处理实际工作流和任务的执行
- Database: 存储工作流和任务的元信息
具体执行流程:
- 【1】调度器触发或者人工触发,生成工作流实例信息出入数据库
- 【2】更具LB选择一个Executor来执行该工作流实例
- 【3】执行状态和结果信息存入数据
- 【4】Web server查询数据库告知任务状态信息
架构特点:
- Web server : 通过quartz来实现分布式调度 ,所有可以水平扩展,不存在单点问题
- Executor : 可以水平扩展,不存在单点问题
- 工作流上的任务只能在一个executor执行,不能分散到多个executor上执行,这点限制了调度能力,可能导致资源分布不均衡
3. AIRFLOW
Airflow 是apache的一个顶级开源项目由python编写,下面摘自官网的一段介绍
Airflow was started in October 2014 by Maxime Beauchemin at Airbnb. It was open source from the very first commit and officially brought under the Airbnb GitHub and announced in June 2015.
The project joined the Apache Software Foundation’s Incubator program in March 2016 and the Foundation announced Apache Airflow as a Top-Level Project in January 2019.
可以看到19年1月已经升级为顶级项目了。
同样先上一张架构图:
主要有如下几种组件构成:
- web server: 主要包括工作流配置,监控,管理等操作
- scheduler: 工作流调度进程,触发工作流执行,状态更新等操作
- 消息队列: 存放任务执行命令和任务执行状态报告
- worker: 执行任务和汇报状态
- mysql: 存放工作流,任务元数据信息
具体执行流程:
- 【1】scheduler扫描dag文件存入数据库,判断是否触发执行
- 【2】到达触发执行时间的dag,生成dag_run,task_instance 存入数据库
- 【3】发送执行任务命令到消息队列
- 【4】worker从队列获取任务执行命令执行任务
- 【5】worker汇报任务执行状态到消息队列
- 【6】schduler获取任务执行状态,并做下一步操作
- 【7】schduler更具状态更新数据库
架构特点:
- web server 主要起管理功能可以横向扩展 ,不存在单点
- scheduler: 只能启动一个,存在单点问题。但有第三方开源方案来解决这个问题,热备方案:https://github.com/teamclairvoyant/airflow-scheduler-failover-controller
- worker:可以启动多个 横向扩展
3. DOLPHIN
Dolphin 是国内开源的一个调度系统,19年加入apache孵化器,实现架构上借鉴了airflow和azkaban吧。
先上一张架构图 :
主要组件构成:
- api server: api接口,管理,执行工作流,任务等。
- Master: 拆分工作流并按照顺序执行任务
- 消息队列:存储任务执行命名消息
- worker: 执行具体任务并更新任务状态
具体执行流程:
- 【1】触发工作执行,生产待执行工作流命令存入数据库
- 【2】master扫描执行待执行工作流命令,执行工作流
- 【3】拆分工作流为一个个执行任务并生成任务实例存入数据库
- 【4】发送执行任务命令到消息队列
- 【5】worker 从消息队列里获取执行任务,执行
- 【6】更新执行任务的状态回数据库
- 【7】master更具任务执行状态,进行下一步操作
架构特点:
- api server : 可横向扩展
- master: 有状态服务 通过zk 来选举一个leader,支持横向扩展
- worker: 可横向扩展
总结
通过架构对比可以发现 azkaban架构上比较简单 依赖组件较少,工作流里的任务执行局限在一个executor,可能存在资源调度不均衡问题,但如果不是大规模任务调度应该没什么问题,适合中小业务量。
airflow 和 dolphine 架构上差不多,只是实现方式上有些差别。从dolphine也看到了一些airflow的一些影子。
airflow 用python来编写dag文件比较灵活 本身是python语言编写,适合python为主的公司来使用。
dolphine有一个适合国人的ui界面比较清晰本身用Java语言开发,适合对Java语言为主的公司,唯一不足是没有采用airflow的状态汇报到消息队列的方式,这样会导致master需要维护很多任务实例的线程来跟踪任务状态,这样可能导致master cpu压力。
最后,我想说通过实际使用发现这些调度系统都只是有个基础调度功能,需要自己公司二次开发,才能满足结合功能实际需要的一些功能,特别是管理功能。
以上是 几种大数据ETL工作流调度系统的介绍和对比 的全部内容, 来源链接: utcz.com/z/514392.html