中邮消费金融有限公司大数据平台任务调度系统设计与实践
背景介绍
中邮消费金融有限公司科技发展部胡东森介绍了其大数据平台的建设现状,包括数据采集(Sqoop、Sqluldr、Kafka)、数据存储(HBase、Iceberg)、数据处理(Hive、Spark、Tez、Impala、Flink、图计算)、任务调度管理(Yarn/K8S、离线/流式)以及数据服务(Oneservice、标签图书馆、服务模型管理、数据应用、营运支撑中心、数据可视化中心、知识图谱服务、ES、Oracle/PG)等组件。平台通过在离线和实时链路的基础上,利用Flink CDC搭建准实时场采集链路,集成Iceberg数据湖组件实现数据同源、同计算引擎、同存储、同计算口径,构建大数据智能融合统一平台,并通过数据治理管控数据质量、数据标准、元数据。
关键优化设计和实践
调度系统发展历程
中邮消费大数据调度系统经历了从1.0到3.0的演进:
- 1.0版本:自研基于quartz任务框架,xml文件定义工作流,单机且性能较差,任务依赖简单,上百任务量,无接入系统。
- 2.0版本:基于开源airflow 1.10.5重构,Worker分布式,Scheduler HA,任务依赖较复杂,上千任务量,接入采集系统、智能营销系统。
- 2.1版本:基于airflow 2.3,Scheduler和Worker分布式,在线开发IDE&调度策略,任务依赖非常复杂,上万任务量,接入Oneservice取数系统,基于事件驱动的任务调度,数据血缘优化,Devops一站式离线开发平台。
- 3.0版本:基于事件驱动的任务触发,Devops一站式开发平台,批流任务一体化。
开源大数据调度选型对比
对比了Airflow、Oozie、Azkaban、DolphinScheduler等开源调度框架,结论如下:
- Airflow:团队匹配,功能完善,使用和开发成本较低,稳定,框架选型结论选择Airflow。
任务开发实践
- 初级数据分析人员:手工配置+模版生成发布DAG。
- 中级数据分析人员:拖拽生成+任务SQL编写和配置。
- 高级数据分析人员:airflow-code-editor在线DAG定义脚本开发和编辑功能,支持DAG代码Python高亮和语法提醒,支持DAG文件脚本上传下载;code-server在线调试,支持在线web Python开发和调试,airflow tasks test命令+DebugExecutor,支持断点调试、变量追踪等常用debug功能。
任务运行管理
- 血缘分析管理:跨DAG的任务依赖,通过Druid SQL引擎解析SQL,构造点边关系,DAG文件中解析抓取ExternalTaskSensor跨DAG依赖关系,airflow-web从Neo4j查询某任务/表数据的上下游依赖。
- 调度策略:
- 现状痛点:任务集中运行,存算未分离,自建IDC资源紧张,Yarn队列等待的任务持续占用worker实例资源。
- 解决方案:
- 任务资源预留策略:通过末端任务设置的权重值和血缘分析得到任务优先级,预估关键时间段高优先级DAG任务占用的资源情况,结合关键时间段集群的可用资源,进行全局的编排。
- 任务降级策略:任务分级分发不同队列Slot槽控制任务运行并发,低优先级排队运行,高优先级任务即可提交。
- 任务熔断策略:白名单熔断场景,拦截非白名单DAG,延长DAG的超时时间,防止拦截后超时,无法拉起,发送拦截短信进行告警。
任务监控
- SLA监控预警机制:运维值班开启应急调度策略死亡线机制,评估业务影响面。
- 组件监控告警:Scheduler调度耗时、DAG解析耗时、执行日志Error失败任务短信告警。
- 任务趋势监控:提前优化任务、关键时点任务完成率。
- Prometheus + Grafana 关键运行指标:总的、每分钟的执行成功和失败Task数量,DagBag内存结构里的DAG流程实例数量,DAG文件解析和加载时间,Worker的Slot槽位数量。
任务发布
应用实践案例
- 湖仓加工应用:数据采集-入库-计算-生成结果一站式管理,提供全域数据的汇聚、融合加工、依赖关系管理,闭环涵盖数据流传全流程支撑数仓加工应用。
- 营销策略应用:营销系统生成DAG任务,获取标签命中的客群包,营销系统进行活动推送,图书馆定时DAG获取DB里的标签Json对象,转换为HQL任务DAG运行在标签图书馆配置标签的定义和组合计算规则并以Json格式保存在DB。
- Oneservice自助提数应用:业务人员在Oneservice Web后台定义跑数SQL任务和对应标签,Oneservice调用airflow-web rest-api 生成DAG运行,推送结果文件到SFTP或SQOOP导入到业务库临时表,业务系统发起提数请求,发送SQL任务标签ID和相关查询参数到Oneservice Kafka队列,Oneservice发送结果通知,业务系统接SFTP文件,并解析处理或者从sqoop导入的临时表获取。
未来规划
- 基于事件驱动的任务触发。
- Devops一站式开发平台。
- 数据血缘标准化。
- 数据血缘展示marguez工具。
- 数据血缘OpenLineage标准统一。