Flink 在 OPPO 的平台研发与应用实践 张俊
2020-03-01 1216浏览
- 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:.taskmanager....Kafka Consumer.records-lag-max Flink KafkaConsumer Flink Job Flink MetricGroup Flink MetricRegistry Flink MetricReporter ES Kafka Flink Operators.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.自我介绍