消费金融行业大数据平台任务调度系统设计与实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 消费金融行业大数据平台任务调度系统
设计与实践
中邮消费金融有限公司/ 胡东森
2.
3. 自我介绍
胡东森 中邮消费金融 科技发展部
2011年毕业于北邮,曾就职于中国移动、腾讯从事
大数据平台项目研发工作。现就职于中邮消费金融,主
要负责公司大数据基础平台服务搭建和研发。曾带领团
队完成大数据统一调度服务平台、大数据多维分析平
台、贷后数据智能化的应用平台研发、客户画像准实时
数仓研发,稳定支撑了营销、⻛险、贷后场景等数据驱
动应用落地。
4. Contents 大纲
• 背景介绍
• 关键优化设计和实践
• 应用实践案例
• 未来规划
5. 中邮消费大数据平台建设现状
营运支撑中心
数据应用
⻛控支撑中心
营销支撑中心
数据可视化中心
经营管理支撑中心
数据管理
数据权限和安全
数据服务
标签图书馆服务
Oneservice数据服务
离线计算
计算引擎
数据存储
数据采集
底层硬件
Hive
MR
模型管理服务
交互式计算
Spark
Tez
数据湖Iceberg
Sqoop
Impala
数据标准
任务调度管理
实时计算
ES
元数据管理
Flink
离线任务调度
图计算
Presto
离线数仓Hive
知识图谱服务
实时数仓HBase/AS
资源调度管理Yarn/K8S
Neo4j图数据库
Kafka
Sqluldr
流式任务调度
ES
Oracle/PG
FlinkCDC
数据规范
数据生命周期
数据血缘
自建私有云IDC
采:在离线和实时链路的基础上,通过FlinkCDC搭建准实时场采集链路,提供分钟级的数据,比传统数仓有更高的时效性
存:集成iceberg数据湖组件,利用其upsert能力和对Flink、Spark计算引擎的良好兼容,实现准实时场景下的数据同源、同计算引擎、同存储、同计算口径;通过数据分层架构,
按主题整合业务数据,建立面向业务和科技人员的语义层,为各应用系统提供标准化、准确、高效的数据支撑
算:离线计算引擎以MR和Spark为主,实时计算引擎为Flink为主,交互分析计算以ES/impala/presto为主
用:构建大数据智能融合统一平台,将异构的计算引擎、异构的存储服务进行屏蔽,对外提供简单统一的逻辑入口和虚拟化的标准SQL视图方案
管:通过数据治理管控数据质量、数据标准、元数据,规范数据中台的设计开发过程,保障数据质量
6. 中邮大数据调度系统发展历程
2019 2020 2021
2022-2023
调度系统1.0 调度系统2.0 调度系统2.1 • 自研基于quartz任务框架 • 基于开源 airflow 1.10.5 重构调度系统2.0 • 切换升级airflow2.3 • 基于事件驱动的任务调度
• xml文件定义工作流 • Worker 分布式 • Scheduler和Worker分布式 • 数据血缘优化
• 单机且性能较差 • Scheduler HA • 在线开发IDE&调度策略 • Devops一站式离线开发平台
• 任务依赖简单 • 任务依赖较复杂 • 任务依赖非常复杂 • 上百任务量 • 上千任务量 • 上万任务量 • 无接入系统 • 接入采集系统、智能营销系统 • 接入Oneservice取数系统
调度系统3.0
7. 开源大数据调度选型对比
框架
功能完善
使用和开发成本
大数据生态
Airflow 功能强大,支持大数据常⻅的HadoopMR、 Hive、Spark、
Sqoop、 Python、Shell等多种任务类型,支持自定义任务
web 界面简单和人性化,支持运行,清理,重跑,追数等功
能
提供DAG代码查看、运行状态、运行耗时、执行日志查询功
能
支持分布式worker和HA 可以与Hive,Presto,HDFS,S3等主流大数据相
基于Python脚本文件定义DAG,清晰灵活易理
关存储进行交互
解,优雅,作业的定义很简单明
2019年成为apache顶级开源项目,社区非常活
服务部署独立简单,Python环境和db,支持
跃,github star数达到2w+
K8s 部署
众多互联网大厂使用,包括:Google GCP/AWS/
代码简洁优雅,以插件化的方式集成第三方的
Adobe/Airbnb/Paypal/Gitlab/Twitter/阿里巴巴 /腾
拓展功能,二开拓展能力强
讯音乐/小米/Oppo/有赞/蔚来汽⻋/快手等
Oozie 支持大数据常⻅的MR、Pig、Hive、Sqoop、Spark、Shell等
多种算子
跟HUE集成,可以进行可视化的DAG配置和任务SQL开发
支持任务暂停、恢复、补数
支持分布式worker和ha 基于XML属性文件定义DAG,非常冗⻓和繁
琐,社区活跃度低
服务部署较重,包括zk、db、负载均衡器
代码复杂度比较高,不易于二次开发
Azkaban
Dolphin
Scheduler
由Cloudera公司贡献给Apache社区,集成在
CDH5.x发行版中,开箱即用
社区不是很活跃,逐渐过时
语言
Python
Java
基于自定义DSL的YAML文件配置定义DAG,配
支持command、HadoopShell、Java、HadoopJava、Pig、 置较复杂,不支持跨DAG依赖
由Linkedin公司推出,社区较活跃,github star数
Hive等丰富的算子类型
DAG任务执行中信息存储在内存中并没有持久
达到4.1k
支持分布式worker和ha
化,所以一旦失败会丢失所有工作流
服务部署独立简单,Java环境和db Java
支持MR、Spark、SQL(mysql、postgresql、hive/sparksql)、
python等多种大数据平台任务类型,支持定义任务
基于自定义DSL的生成的DAG,支持拖拽来绘
支持任务状态、任务类型、重试次数、任务运行机器、可视 制DAG,操作便捷,用户体验很好
化变量,以及任务流执行日志
服务部署较重,包括zk、db,支持 K8s 部署
支持分布式worker和ha Java
2019年由中国易观公司开源的一个调度系统,成
为了Apache孵化器项目,2021年成为apache顶级
开源项目,社区非常活跃,国内众多公司使用,
包括:腾讯/中国移动/顺丰/联想/亚信/招商银行等
8. 开框架选型结论
简单
airflow的架构设计原则就是最低依赖,它的scheduler和
02
01
灵活
airflow的dag定义文件是python脚本,可以基于模版、参数
worker分布式,都没有用(Raft、Paxos 等)这些分布式 等方式动态生成task、甚至是dag,以及进行复杂的条件判
协议进行通信,或者借助zk、consul等分布式协调工具, 断分支等;Airflow 内置了一个插件管理器,可以集成很多
只依赖db进行通信服,任务部署简单;代码逻辑也比较简
洁优雅
稳定
Airflow在国外已经成为事实上的工作流标准,主要云厂商
都提供相应的云服务,可以开箱即用,国内也是阿里云
EMR的工作流标准组件
Airflow
03
04
不在airflow开源项目里的第三方的能力
人员匹配
团队本身具有Python相关的开发人员,而AI等工程化也绕不
开Python的技术栈,必须有这方面的研发能力。
人力投入可控,先有再优原则
9. Contents
大纲
背景介绍
•
• 关键优化设计和实践
• 应用实践案例
• 未来规划
10. 部署架构和服务间调用关系
Python开发和调试DAG
Scheduler解析实例化和分发Task
Worker获取Task消息命令并执行
可视化监控和查看DAG
11. 整体功能模块架构和问题挑战
任务开发
开发DAG的效率和工具,需要满足不同人诉求,
人工开发DAG + 自动生成
任务运行管理
监管要求无法上云,自建IDC扩容周期⻓,
资源紧张,峰值任务拥塞;任务上下游依赖
复杂,排查困难
任务发布
金融安全策略的原因,开发和线上网络隔离,
复杂网络如何平滑测试和发布
任务监控
在线⻛控、营销场景任务,调度影响重大,监
控告警、高可用、容灾挑战大
12. 任务开发实践:提升开发效率
初级数据分析人员:手工配置+模版生成
1 DAG组成
2 生成DAG
3 发布DAG
DAG基本参数+任务参数+任务运行SQL+基
础模板
根据配置参数,填充基础模板,生成可执行
DAG
根据生成的DAG,上传Airflow,在Airflow-
Web界面上校验、执行,测试
13. 任务开发实践
中级数据分析人员:拖拽生成+任务SQL编写和配置
01
可视化任务SQL编写和配置
02
功能拓展,增加拖拉拽生成依赖关系
14. 任务开发实践
高级数据分析人员:airflow-code-editor
在线DAG定义脚本开发和编辑功能
支持DAG代码Python高亮和语法提醒
支持DAG文件脚本上传下载
15. 任务开发实践
高级数据分析人员:code-server 在线调试
01
02
03
在线web Python 开发和调试
airflow tasks test命令+DebugExecutor
支持断点调试、变量追踪等常用debug功能
16. 任务运行管理:血缘分析管理
目标:快速准确的找到某任务/表数据的上游和下游依
赖,进行影响面分析
任务依赖到表
依赖
解决
问题
跨DAG的任
务依赖
17. 任务运行管理:血缘分析管理
抓取HiveOperator/SparkOperator/BashOperator中SQL
D r u i d S Q L 引擎解析SQL,构造点边关系
DAG文件中解析抓取ExternalTaskSensor跨DAG依赖关系
airflow-web 从Neo4j 查询某任务/表数据的上下游依赖
18. 任务运行管理:血缘分析管理
血缘关系分析查询
19. 任务运行管理:调度策略
1
○ 任务集中运行,如凌晨3点有500个
DAG同时拉起
2
○ 存算未分离,无法做到计算和存储的弹
性扩缩容
3
○ 自建IDC,服务器采购周期⻓,资源⻓
期紧张
4
○ Yarn队列等待的任务持续占用worker实
例资源
现状
痛点
20. 任务运行管理:调度策略
普通调度策略 任务资源预留策略
任务降级策略 任务熔断策略
21. 任务运行管理:任务资源预留策略
方案思路
全局任务和资源编排预留,通过末端任务设
置的权重值和血缘分析得到任务优先级,预
估关键时间段(凌晨0点到6点)高优先级
DAG任务占用的资源情况(CPU、内存、运
行时间),结合关键时间段集群的可用资
源,进行全局的编排;
实现效果
保证关键性的高优先级任务(评分卡、营销
类)优先获得资源,同时在资源空闲阶段也
尽力提交低优先级任务,最大化的提高集群
的跑批吞吐量
22. 任务运行管理:任务资源预留策略
关键时间资源预留
Yarn内存剩余Available Memory
YarnCPU剩余Available CPU
内存预留Reserved Memory
CPU预留Reserved VCores
当前任务预估Task Cpu Need
当前任务预估Task Memory Need
Available Memory - Reserved Memory - Task Memory Need - > 0
提交Yarn判断:
且 Available CPU - Reserved CPU - Task Cpu Need > 0
23. 任务运行管理:任务资源预留策略
CPU资源预估计算
剩余 = 核数 *(t - t1)vcore-seconds
预留 = ∑历史14天内平均使用的面积
待提交任务 = 灰度环境Aggregate
Resource Allocation指标
当前占用 = ∑正在运行任务历史14天面积
异步计算更新
24. 任务运行管理:任务资源预留策略
T1时刻低优先级任务 T2时刻高优先级任务
T3时刻低优先级任务 T4时刻高优先级任务
关键链路任务平均完成时间缩短2小时
25. 任务运行管理:任务降级策略
任务分级分发
不同队列Slot槽控制任务运行
并发
低优先级排队运行,高优先级任务即
可提交
26. 任务运行管理:任务熔断策略
白名单熔断场景:当由于上游数据延迟、服务器
故障等原因导致批量DAG任务大批量堆积。
初始化末端DAG和任务名称到白名单表
定时调用血缘服务将末端DAG及其上游链路
DAG全部追加和更新到白名单表
Scheduler主轮询DependencyStatus依赖检
测中,拦截非白名单DAG
对拦截非白名单DAG,延⻓DAG的超时时
间,防止拦截后超时,无法拉起
拦截非白名单DAG,发送拦截短信进行告
警,通知相关人员
关键任务SLA 99.9%
27. 任务运行管理:Airflow 分布式
、
方案一:
单机多进程
方案二:
简单可靠
重启⻛险
分布式
Worker
消息队列
分布式锁
28. 任务运行管理:Airflow 分布式
多scheduler并发 worker统一管理
Scheduler和worker KIP LOCKED or
NOWAIT SQL
独立
29. 任务监控
任务趋势监控 任务SLA监控 组件监控告警
● 提前优化任务
● 关键时点任务完
成率 预警机制,运维值班 Scheduler调度
耗时、DAG解析
耗时
执行日志Error失
败任务短信告警
开启应急调度策略
死亡线机制,评估业
务影响面
30. 任务监控
Prometheus +Grafana 关
键运行指标:
总的、每分钟的执行成功和失败
Task数量
DagBag内存结构里的DAG流程实
例数量
DAG文件解析和加载时间
Worker的Slot槽位数量
31. 任务发布
多租户?
Gitlab管理
分支多环境发
布
32. Contents
大纲
背景介绍
•
• 关键优化设计和实践
• 应用实践案例
• 未来规划
33. 支撑数仓加工应用
数据采集-入库-计算-生成结果一站式管理,提供全域数据的汇聚、融合加工、依赖关系管理,闭环涵盖数据流传全流程
34. 支撑数仓加工应用
数据采集-入库-计算-生成结果一站式管理,提供全域数据的汇聚、融合加工、依赖关系管理,闭环涵盖数据流传全流程
35. 支撑营销策旅应用
在标签图书馆配置标签的定义和 图书馆定时DAG获取DB里的标签
组合计算规则并以Json格式保存 Json对象,转换为HQL任务DAG
在DB 运行
营销系统生成DAG任务,获取标
签命中的客群包,营销系统进行活
动推送
36. 支撑Oneservice应用:自助提数
业务人员在Oneservice Web后台定义跑数SQL任务和对应
标签
业务系统发起提数请求,发送SQL任务标签ID和相关查询参
数到Oneservice Kafka队列
Oneservice调用airflow-web rest-api 生成DAG运行,
推送结果文件到SFTP或SQOOP导入到业务库临时表
Oneservice发送结果通知,业务系统接SFTP文件,并解析
处理或者从sqoop导入的临时表获取
37. Contents
大纲
背景介绍
•
• 关键优化设计和实践
• 应用实践案例
• 未来规划
38. 内容回顾
◆ 中邮消费调度系统建设历程:调度系统1.0到2.1演进历程、开源调度框架选型对比
◆
任务开发的挑战和实践经验:DAG开发模版化生成工具、DCMP可视化拖拉拽工具、在
线Code编辑工具、Code-Server DebugExcutor 在线调试
◆
调度任务运行挑战和实践经验:调度资源预留策略、调度降级策略、调度熔断策略;血
缘分析、分布式架构升级演进过程
◆
任务发布和监控挑战和实践经验:调度SLA预警、Prometheus运行指标监控、Gitlab版
本发布管理
◆
基于调度系统的大数据应用实践:湖仓加工应用、营销策略应用、Oneservice自助取数
应用
39. 基于事件驱动的任务触发
1
DAG内部去除数据库任务状态触发机制
2
Scheduler服务主循环,减少等待间隔
40. Devops一站式开发平台
1 任务+DAG的Devops
2 批流任务一体化
41. 数据血缘标准化
1
2
数据血缘OpenLineage标准统一
数据血缘展示margquez工具
42.
43. THANKS!