Flink 在 OPPO 的平台研发与应用实践 张俊

QCon大会

2019/06/25 发布于 技术 分类

QCon  QCon2019 

文字内容
1. Flink在OPPO的平台研发与应用实践 张俊 OPPO大数据平台研发负责人
2. 自我介绍 目录
3. 自我介绍 6年大数据系统研发与应用经验,曾工作于摩根士丹利、腾讯,从无到有设计研发 腾讯大数据套件 喜欢不断的技术挑战,从学生时代到工作生涯,经历过嵌入式、系统虚拟化、金融 系统以及大数据的方向转变 2017年加入OPPO,负责大数据平台研发,现主要方向为数据仓库、数据产品、 实时计算、OLAP查询
4. 自我介绍 目录 基于Flink的实时计算平台OStream: l 业务与技术背景 l 建设思路 l 研发与运营工作 l 应用案例 l 未来展望
5. 自我介绍 目录 基于Flink的实时计算平台OStream: l 业务与技术背景 l 建设思路 l 研发与运营工作 l 应用案例 l 未来展望
6. OPPO业务与数据规模 自我介绍 总数据量量100PB+ ⽇日增数据量量200TB+ OS⽇日活跃⽤用户2亿+ 应用 商店 浏览器 信息流 ColorOS 短视频 搜索 语音 助手 2012 2013 2014 2015 2016 2017 2018
7. 数据处理pipeline:离线模式 自我介绍 接⼊入系统 原始表 ⼩小时级ETL 明细表 天级汇总 汇总表 NiFi HDFS Hive HDFS Hive HDFS 手机 Presto 日志 MySQL/ Kylin ES Redis/ HBase DB OSql EasyData OFlow innerEye Insights OService 交互查询 ⾃自助提数 任务调度 报表分析 ⽤用户画像 接⼝口服务
8. 实时化的诉求 自我介绍 小时/天级 à 分钟/秒级 业务侧 平台侧 o 实时报表:人群投放的到达率/曝光率/点击率 o 调度任务:凌晨0点大批量启动 o 实时标签:用户当前所在的商圈 o 标签导入:全量导入耗费数小时 o 实时接口:用户最近下载某APP的时间 o 质量监控:无法及时发现数据异常
9. 实时流处理的乱象 自我介绍 系统多,部署、开发、运维各自为政,烟囱林立 计算引擎 计算 存储引擎 存储 Storm Redis Flink HBase Spark streaming Elasticsearch Kafka streams MySql
10. 平台化的推进 自我介绍 业务赋能(点) o 屏蔽底层,提高易用性 o 抽象接口,适用于更多用户 o 签订SLA,服务有保障 规模效应(面) o 统一研发,减少人员投入 o 统一集群,提升资源利用率 o 统一运营,降低运维成本
11. 自我介绍 目录 基于Flink的实时计算平台OStream: l 业务与技术背景 l 建设思路 l 研发与运营工作 l 应用案例 l 未来展望
12. 平台分层设计原则 自我介绍 API:易用性、表达性、灵活性 Runtime:性能、健壮性、可扩展性
13. 平台API选择 自我介绍 根据涉及数据处理的人员分布与使用习惯来判断 85% 10% SQL JAR 5% UI
14. 平台Runtime选择 自我介绍 SQL支持 Spark Streaming 低延迟 Exactly-once 状态管理 Flink 批流融合 NO NO NO Kafka Stream Storm 复杂计算 NO NO NO NO
15. 平台Runtime选择(Cont’d) 自我介绍 Flink Engine Flink SQL o 低延迟、高吞吐 o ANSI SQL + UDF o 端到端exactly-once o 数据类型 + 内置函数 o 高容错的状态管理 o 自定义Source/Sink o Event time & 晚点数据处理 o Windows + Join o 基于YARN的资源管理 o 批流统一
16. 离线到实时处理的平滑迁移 自我介绍 ⼩小时/天级 秒级/分钟级 编程接⼝口 SQL + UDF SQL + UDF 编程接⼝口 数仓抽象 Table Table 数仓抽象 批量量计算 Hive Flink 流式计算 离线数据 HDFS Kafka 实时数据 API Runtime
17. 数据处理pipeline:实时模式 自我介绍 接⼊入系统 原始表 流式ETL 明细表 流式汇总 汇总表 NiFi Kafka Flink Kafka Flink Kafka 手机 Flink 日志 MySQL/ Kylin ES Redis/ HBase DB OStream OStream innerEye Insights OService 交互查询 流作业管理理 报表分析 ⽤用户画像 接⼝口服务
18. 自我介绍 目录 基于Flink的实时计算平台OStream: l 业务与技术背景 l 建设思路 l 研发与运营工作 l 应用案例 l 未来展望
19. OStream平台总体架构 自我介绍 集成工具 UI CI/CD 编程接口 SQL JAR WEB IDE 平台特性 元数据 管理 流作业 管理 日志 检索 Flink 基础引擎 监控 告警 ES Kafka YARN HDFS Druid
20. 基于SQL开发的框架 自我介绍 编程接⼝口 SQL + UDF 数仓抽象 Table API
21. 基于SQL开发的框架 自我介绍 编程接⼝口 SQL + UDF 数仓抽象 Table 流式计算 Flink API 元数据管理 Runtime 实时数据 Kafka 流作业管理 o 库表创建 o SQL编译 o UDF上传 o 作业提交
22. Flink SQL API编程示例 自我介绍 定义与注册输入表 定义与注册输入出表 注册UDF 提交执行SQL
23. SQL开发框架的实现 自我介绍 创建 存储 Job 开发IDE MySQL 加载 生成 Flink JobGraph 提交 YARN Flink TableEnvironment 编译 Job Store 注册 Flink ExternalCatalog 加载 MySQL 存储 创建 元数据中心 Flink TableDescriptor Ref:https://mp.weixin.qq.com/s/DPLJA8Q2gDXLZF17FOcczw
24. 元数据中心 自我介绍
25. 开发IDE 自我介绍
26. 面向SQL开发的基本扩展 自我介绍 加密解密 MySQL 格式转换 Redis 格式转换 位置解析 UDF 维表 关联 HBase Hive
27. 元数据中心 - 维表创建 自我介绍
28. 维表关联的实现 自我介绍 SQL改写 ad_clicks SQL解析 Table RichFlatmapFunction JoinContext open() Stream flatmap() MySQL cache Stream flatmap() Table ad_clicks_user 流 表 二 象 性
29. 日志检索 自我介绍
30. 日志采集pipeline 自我介绍 SQL JAR OStream log4j. properties containerized.master.env. ostream.app.id application_xxx containerized.master.env. ostream.job.name browser_feeds_job containerized.master.env. ostream.job.type jobmanager YARN Job Manager containerized. taskmanager.env. ostream.app.id application_xxx containerized. taskmanager.env. ostream.job.name browser_feeds_job containerized. taskmanager.env. ostream.job.type taskmanager Task Manager log4j Appender Kafka ES
31. 指标监控 自我介绍 Flink作业吞吐 Kafka消费lag Per-operator/task Per-partition
32. 指标采集pipeline 自我介绍 system_scope: <host>.taskmanager.<tm_id>.<job_name>.<operator_name>.<subtask_index> Kafka Consumer <system_scope>.records-lag-max Flink KafkaConsumer Flink Job Flink MetricGroup Flink MetricRegistry Flink MetricReporter ES Kafka Flink Operators <system_scope>.numRecordsOutPerSecond
33. 告警规则 自我介绍
34. 平台研发的实践心得 自我介绍 维护纯净分支 o 基于扩展点的插件式开发: 外部表对接、日志/指标采集 o 基于API的二次抽像开发: SQL作业管理、维表关联 参与开源社区 o 关注动态:FLIP、Pull request o 建立认知:typo fix、unit test o 快速调试:集成测试本地化、自动化 Ref: https://github.com/tragicjun/flink-jerry-project
35. 离线-实时计算集群拆分 自我介绍 离线集群资源分配具有不确定性
36. 离线-实时计算集群拆分(Cont’d) 自我介绍 实时作业重启导致资源被离线作业抢占 root root batch queue streaming queue batch queue 透支 streaming queue
37. 测试运行模式 自我介绍 测试 作业 发布 读写 生产 作业 读写 测试数据不及时、量级小, 计算结果无法完全验证作业逻辑 测试 数据 采样 生产 数据
38. 测试运行模式 自我介绍 测试 作业 发布 读写 生产 作业 读写 测试数据不及时、量级小, 计算结果无法完全验证作业逻辑 测试 数据 采样 生产 数据 测试 作业 发布 生产 作业 读 写 测试 数据 schema 同步 读写 生产 数据 平台自动改写SQL,写被指向测试库
39. 全链路延迟监控 自我介绍 构建实时流血缘关系,打通全链路延迟统计 lag0 lag1 lag2 lag3 NiFi Kafka ETL Kafka Aggregate Kafka Druid Channel Table Job Table Job Table Table total_lag = lag0 + lag1 + lag2 + lag3
40. 自我介绍 目录 基于Flink的实时计算平台OStream: l 业务与技术背景 l 建设思路 l 研发与运营工作 l 应用案例 l 未来展望
41. 实时交互式查询 自我介绍
42. 实时ETL 自我介绍 将统一上报通道拆分成面向业务的原始表 Kafka 手机 NiFi Kafka ETL HDFS
43. 实时标签 自我介绍 手机 将经纬度转换成当前所在商圈的标签 NiFi Kafka Convert Kafka ES
44. 自我介绍 目录 基于Flink的实时计算平台OStream: l 业务与技术背景 l 建设思路 l 研发与运营工作 l 应用案例 l 未来展望
45. 从自动化到智能化 自我介绍 自动化 智能化 智慧化 机械、重复 自适应、自学习 自我意识、思维 自动化 智能化 o 端到端自动打通 o 作业资源自动伸缩 o SQL自动生成 o 作业异常自我修复 o 告警规则自动生成 o 作业参数动态调优
46. 端到端环节割裂 自我介绍 Kafka Table SQL + UDF 数据处理 Kafka Table 数据导入 Druid 报表 ES 标签 HBase 接口 数据资产化
47. 端到端自动打通 自我介绍 Kafka Table SQL + UDF 展示表 维度字段 指标字段 筛选字段 Druid 报表 标签表 用户ID字段 标签名字段 标签值字段 ES 标签 接口表 输入字段 输出字段 HBase 接口 数据处理 + 数据导入 + 数据资产化
48. 端到端自动打通(Cont’d) 自我介绍 创建展示表,写入数据自动与下游的Druid及报表系统打通
49. 资源智能规划与调整 自我介绍 Dhalion: Self-Regulating Stream Processing in Heron
50. 自我介绍
51. 自我介绍