滴滴出行大数据部BI系统组负责人艾毅 - 滴滴业务实时监控系统架构及实践
2020-02-27 1863浏览
- 1.滴滴业务实时监控系统架构及实践 艾毅 2016/12
- 2.
- 3.议程 • 滴滴实时监控系统演变历程 • 当前架构及服务介绍 • 系统优化方向
- 4.滴滴实时监控系统演变历程 2015年之前 2015年至今 挑 • 快速满足业务需求 战 • 业务数据库分库、分表 • 数据、维度、指标越来越多 解决方 案 预计算 瓶颈: • 计算、存储成本指数级增长 • 不易扩展 优势: • 实时分析海量数据 (秒级) • OLAP系统交互式查询
- 5.议程 • 滴滴实时监控系统演变历程 • 当前架构及服务介绍 • 系统优化方向
- 6.滴滴实时监控系统当前架构概览 Mysql Binlog Text Log API Canal Server Flume Agent Python Daemon Kafka Cluster 1 • Raw data • 通用业务 Online Machine Learning Kafka Cluster 2 • Json data • 数据分析 APP:监控报警、热力图… 基于指标的语义化API Druid Kafka Real-time Indexer Druid Broker API Druid HDFS Batch Indexer Samza Unified ETL Job • 数据格式转换 • 数据去重 Samza Metrics Computing Samza HDFS Producer HDFS
- 7.当前系统架构特点 • 高可用 • 易扩展 • 高性能 • 支持有状态的实时计算
- 8.为何选用Kafka? Kafka 是一个高性能、高可用、易扩展的 分布式日志系统 将整个数据处理流程解耦
- 9.为何选用Druid? Druid是针对时间序列数据提供低延时的数据写 入以及快速交互式查询的的分布式OLAP数据库
- 10.Druid的数据存储方式 • 为OLAP查询优化过的列式存储结构:Segment • Segment中存储聚合计算后的统计结果 • 主要根据时间对Segment文件进行分片存储
- 11.Segment包含的三种列类型 • 时间戳列 Ø 作为数据分发、存储、查询的依据 • 维度列 Ø 支持过滤和分组 Ø 使用字典编码压缩 Ø 使用BitMap索引压缩 • 指标列 Ø 用来聚合计算 Ø 使用LZ4压缩
- 12.Druid的数据处理流程介绍 实时流数据 Lambda架构 离线数据 Druid节点 外部依赖 缓存 客户端请求 Segements 查询 缓存 元数据
- 13.Druid Kafka Indexing Service介绍 Overlord 控制流 数据流 Middle Managers • 实现Exactly-Once的实时计 算 Middle Manager 1 Kafka Middle Manager 2 Middle Manager 3 Partition 0 Partition 1 Partition 0 Partition 1 Topic 1 Topic 2 • Kafka中每个Partiton的消息是 严格有序、追加写入、不可改变 的 • 可“回退”到任意的Partition-
- 14.Druid支持近似统计算法 • 为什么要使用近似算法? Ø 计算速度快 Ø 误差可控 Ø 显著降低计算、存储需求 • Druid是如何实现近似算法的? Ø 基于Yahoo开发的 datasketches 库 Ø 使用Theta Sketch近似算法 Ø 支持集合操作(并集、交集、差集)
- 15.Druid支持地理查询 • 矩形查找 • 圆形查找 滴滴实时订单热力图 • 任意多边形查找 Ø 滴滴贡献给了社区 Ø 包含在Druid 0.9.2版本
- 16.为何选用Samza? Samza是一个分布式的实时计算框架; 支持低延时的、有状态的实时计算
- 17.Samza运行机制介绍 Node Manager Node Manager YARN AM YARN AM Samza job Container 1 Host 1 Samza job Container 2 Host 2 Samza Job on YARN VS Node Manager Node Manager YARN AM YARN AM MR job Container 1 MR job Container 2 Host 1 Host 2 Map Reduce Job on YARN Samza Job可看作一个实时计算版的Map/Reduce Job
- 18.Samza数据处理流程介绍 输入流 Partition 0 Partition 1 Partition 2 本地状态存储 (RocksDB) Container 1 Task 0 Task 1 Task 2 Container 2 job Checkpoint Stream 输出流 Changelog Stream
- 19.Samza的高可用性 Kafka Log A Log B Log C Samza Job 1 Job 2 • 不会出现“雪崩” • 不会丢失数据 • 缓存队列:基于磁盘,不受内存限制 • YARN为Samza Job提供了容错机制 Log D YARN
- 20.Samza常见计算类型 • 处理单条信息 ØFilter:根据特定条件筛选匹配的记录 ØMap:Log= f(Log) • 处理多条信息 ØJoin:对多个数据流做关联计算 ØGroup:对记录进行分组 ØAggregate:对处于相同Group的数据进行聚合计算 需要状态管理
- 21.Samza实现有状态的实时计算 • 基于过去的数据状态来处理当前的数据:本质是数据缓存机制 • Samza基于RocksDB实现本地状态存储 输入流 DB DB Query 输入流 DB Change log Task1 Task2 Task3 Task1 DB Task2 DB Task3 DB 大数据实时计算场景下 移动数据,离计算资源近一点
- 22.滴滴实时监控可视化界面 • 监控覆盖滴滴全部核心业务线
- 23.滴滴业务智能预警系统 基于Holt-Winters时间序列分析模型
- 24.Holt-Winters时间序列分析模型介绍
- 25.议程 • 滴滴实时监控系统演变历程 • 当前架构及服务介绍 • 系统优化方向
- 26.Lambda架构的问题 • 同样的业务逻辑需要维护实时和离线计算两套代码 • 重新处理数据只能依赖离线计算,计算较慢
- 27.优化方向 • 实现“端到端”的Exactly-Once实时数据处理,不再需要离线修正 Ø Samza Local Cache Ø 智能感知Kafka Partiton变化 Ø Druid Kafka Indexing Service • 数据的重新处理机制: Ø Kappa : 新起一个实时计算任务,新旧任务并行处理 Ø Liquid :停止当前实时计算任务,修改Offset后,重启任务
- 28.THANK YOU 北京嘀嘀无限科技发展有限公司 北京市海淀区东北旺路8号院尚东·数字山谷B2号楼 www.xiaojukeji.com