从 Storm 迁移到 Flink,美团外卖实时数仓建设实践( 三 )
实时 OLAP 怎么实现?有没有一种自带存储的实时计算引擎 , 当实时数据来了之后 , 可以灵活的在一定范围内自由计算 , 并且有一定的数据承载能力 , 同时支持分析查询响应呢?随着技术的发展 , 目前 MPP 引擎发展非常迅速 , 性能也在飞快提升 , 所以在这种场景下就有了一种新的可能 。 这里我们使用的是 Doris 引擎 。
这种想法在业内也已经有实践 , 且成为一个重要探索方向 。 阿里基于 ADB 的实时 OLAP 方案等 。
2. 实时数仓架构设计
文章插图
从整个实时数仓架构来看 , 首先考虑的是如何管理所有的实时数据 , 资源如何有效整合 , 数据如何进行建设 。
从方法论来讲 , 实时和离线是非常相似的 , 离线数仓早期的时候也是 case by case , 当数据规模涨到一定量的时候才会考虑如何治理 。 分层是一种非常有效的数据治理方式 , 所以在实时数仓如何进行管理的问题上 , 首先考虑的也是分层的处理逻辑 , 具体如下:
- 数据源:在数据源的层面 , 离线和实时在数据源是一致的 , 主要分为日志类和业务类 , 日志类又包括用户日志 , DB 日志以及服务器日志等 。
- 实时明细层:在明细层 , 为了解决重复建设的问题 , 要进行统一构建 , 利用离线数仓的模式 , 建设统一的基础明细数据层 , 按照主题进行管理 , 明细层的目的是给下游提供直接可用的数据 , 因此要对基础层进行统一的加工 , 比如清洗、过滤、扩维等 。
- 汇总层:汇总层通过 Flink 或 Storm 的简洁算子直接可以算出结果 , 并且形成汇总指标池 , 所有的指标都统一在汇总层加工 , 所有人按照统一的规范管理建设 , 形成可复用的汇总结果 。
06 实时平台化建设
文章插图
架构确定之后 , 后面考虑的是如何进行平台化的建设 , 实时平台化建设完全附加于实时数仓管理之上进行的 。
首先进行功能的抽象 , 把功能抽象成组件 , 这样就可以达到标准化的生产 , 系统化的保障就可以更深入的建设 , 对于基础加工层的清洗、过滤、合流、扩维、转换、加密、筛选等功能都可以抽象出来 , 基础层通过这种组件化的方式构建直接可用的数据结果流 。 这其中会有一个问题 , 用户的需求多样 , 满足了这个用户 , 如何兼容其他的用户 , 因此可能会出现冗余加工的情况 , 从存储来讲 , 实时数据不存历史 , 不会消耗过多的存储 , 这种冗余是可以接受的 , 通过冗余的方式可以提高生产效率 , 是一种空间换时间的思想应用 。
通过基础层的加工 , 数据全部沉淀到 IDL 层 , 同时写到 OLAP 引擎的基础层 , 再往上是实时汇总层计算 , 基于 Storm、Flink 或 Doris , 生产多维度的汇总指标 , 形成统一的汇总层 , 进行统一的存储分发 。
当这些功能都有了以后 , 元数据管理 , 指标管理 , 数据安全性、SLA、数据质量等系统能力也会逐渐构建起来 。
1. 实时基础层功能
文章插图