300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > airflow和MySQL_Airflow知识总结

airflow和MySQL_Airflow知识总结

时间:2024-07-09 20:29:53

相关推荐

airflow和MySQL_Airflow知识总结

1.Airflow是什么

airflow是apache基金会的顶级开源项目之一,主要用于调度、监控工作流

2.airflow main concepts

airflow的基本组件架构

airflow scheduler.jpg

scheduler:以有向无环图(dag)的形式创建任务工作流,根据用户的配置将任务定时/定期进行调度

worker:任务的执行单元,worker会从任务队列当中拉取任务并运行任务

webserver:任务与dag的web管理服务

message queue: 任务的调度队列,一般使用redis或者rabbiMq作为broker

metadata center: 所有任务、dag、日志的相关元信息均存储于metadata Center,一般使用MySQL进行metadata管理

调度单元

dag: airflow当中work flow的基本单位,通过配置Dag当中的相应参数确定调度时间、调度频率,通过实例化dag当中的task创建实际工作流

task: task由operator以及task upstream/downstream两部分组成,airflow提供了非常丰富的operator能够对接各类平台与系统实现任务执行,任务之间通过简单的上下游关系建立关系组成工作流

queue:airflow通过队列一方面可以实现用户管理(不同的用户绑定不同的队列),另一方面可以实现分布式任务调度(一个队列对应多个分布式服务器)

调度参数

调度时间,包括dag的开始时间、调度时间间隔、调度重试次数、调度重试间隔、初始调度是否往前追加等

并发参数,包括整个ariflow服务最大并发task数,单个dag最大的任务并发数,以及单个dag最大的并发dag_run数目

airflow concurrency.jpg

自定义参数,包括一套使用Jinja2格式的自定义宏参数

3.airflow实践

目前我们在生产环境使用airflow主要还是用于金融数据的ETL,ETL框架的基本结构如下图所示

airflow etl structure.png

我们的所有基础设施都是基于Openshift搭建的私有云,所有的airflow组件均实现容器化部署,容器化的好处主要在于快速的持续集成与发布,同时airflow关键组件均能实现主备容灾与弹性扩缩容;所有的数据经过ETL处理之后存储于本地的数据仓库当中(时间序列金融数据库与对象存储数据文件);同时通过插件将airflow与apache Atlas集成,构建数据生产流任务的血缘关系,进行数据治理,通过Amundsen集成数据检索与数据读写接口,将ETL后的数据开放给用户使用

4.使用当中遇到的各类问题:

ETL调度时间问题: 这个常见的问题可能每一个初次接触airflow的人都会遇到,airflow任务的实际调度时间比设置的调度时间晚一天,这个是因为airflow被设计用于ETL任务调度,而ETL的特点就是等待原始数据收集/预处理完毕之后,再进行运行,比如0101这一天的ETL任务,实际上会在0102的凌晨进行运行

airflow execution date.jpg

mysql死锁问题:此问题在我们前期使用airflow的过程中,频繁出现,问题表现为任务不调度,同时airflow调度器日志显示mysql deadlock,此问题根因为airflow代码bug导致,在scheduler管理任务的过程当中,对task_instance表单会同时有2个查询,而这2个查询在一定情况会发生死锁,感谢我的大佬同事去社区和airflow维护者讨论之后找到了问题根因并修复了这个bug(airflow 1.10后的版本修复了查询语句,防止了死锁的出现)

airflow-deadlock.jpg

HA问题,scheduler单点故障: 前期没有搭建私有云,airflow服务均部署在单台服务器之上,唯一的可靠性保障就是用supervisor保障服务进程持续运行,但是服务器的故障无法避免,后期基础设施云化之后可以保障服务器层面上面的可靠性,同时我们也在本地服务器上面保存了手动运行的脚本,保证私有云故障时可以在本地快速搭建临时服务

任务集中化监控问题,硬件监控,服务监控,业务任务监控: airflow有比较方便的webUI,但是有一个很大的问题就是无法实现任务的集中化监控,任务的集中化最高一级只能到Dag层面,而我们常常需要根据业务属性集中化监控几个甚至几十个Dag的所有任务,对于这种场景,我们一方面搭建了一套ELK日志系统(airflow -> kafka -> logstash -> kibana),在logstash当中根据业务分类创建相应的日志index,最后在kibana当中显示定制化的dashboard;另一方面我们的airflow集成了atlas,可以根据任务之间的血缘关系管理与监控整个生产流的任务状态

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。