美团外卖实时数仓建设实践( 三 )


实时OLAP怎么实现?有没有一种自带存储的实时计算引擎 , 当实时数据来了之后 , 可以灵活的在一定范围内自由计算 , 并且有一定的数据承载能力 , 同时支持分析查询响应呢?随着技术的发展 , 目前MPP引擎发展非常迅速 , 性能也在飞快提升 , 所以在这种场景下就有了一种新的可能 。 这里我们使用的是Doris引擎 。
这种想法在业内也已经有实践 , 且成为一个重要探索方向 。 阿里基于ADB的实时OLAP方案等
2. 实时数仓架构设计
美团外卖实时数仓建设实践文章插图
从整个实时数仓架构来看 , 首先考虑的是如何管理所有的实时数据 , 资源如何有效整合 , 数据如何进行建设 。
从方法论来讲 , 实时和离线是非常相似的 , 离线数仓早期的时候也是case by case , 当数据规模涨到一定量的时候才会考虑如何治理 。 分层是一种非常有效的数据治理方式 , 所以在实时数仓如何进行管理的问题上 , 首先考虑的也是分层的处理逻辑 , 具体如下:

  • 数据源:在数据源的层面 , 离线和实时在数据源是一致的 , 主要分为日志类和业务类 , 日志类又包括用户日志 , DB日志以及服务器日志等 。
  • 实时明细层:在明细层 , 为了解决重复建设的问题 , 要进行统一构建 , 利用离线数仓的模式 , 建设统一的基础明细数据层 , 按照主题进行管理 , 明细层的目的是给下游提供直接可用的数据 , 因此要对基础层进行统一的加工 , 比如清洗、过滤、扩维等 。
  • 汇总层:汇总层通过Flink或Storm的简洁算子直接可以算出结果 , 并且形成汇总指标池 , 所有的指标都统一在汇总层加工 , 所有人按照统一的规范管理建设 , 形成可复用的汇总结果 。
总结起来 , 从整个实时数仓的建设角度来讲 , 首先数据建设的层次化要先建出来 , 先搭框架 , 然后定规范 , 每一层加工到什么程度 , 每一层用什么样的方式 , 当规范定义出来后 , 便于在生产上进行标准化的加工 。 由于要保证时效性 , 设计的时候 , 层次不能太多 , 对于实时性要求比较高的场景 , 基本可以走上图左侧的数据流 , 对于批量处理的需求 , 可以从实时明细层导入到实时olap引擎里 , 基于olap引擎自身的计算和查询能力进行快速的回撤计算 , 如上图右侧的数据流 。
06
实时平台化建设
美团外卖实时数仓建设实践文章插图
架构确定之后 , 后面考虑的是如何进行平台化的建设 , 实时平台化建设完全附加于实时数仓管理之上进行的 。
首先进行功能的抽象 , 把功能抽象成组件 , 这样就可以达到标准化的生产 , 系统化的保障就可以更深入的建设 , 对于基础加工层的清洗、过滤、合流、扩维、转换、加密、筛选等功能都可以抽象出来 , 基础层通过这种组件化的方式构建直接可用的数据结果流 。 这其中会有一个问题 , 用户的需求多样 , 满足了这个用户 , 如何兼容其他的用户 , 因此可能会出现冗余加工的情况 , 从存储来讲 , 实时数据不存历史 , 不会消耗过多的存储 , 这种冗余是可以接受的 , 通过冗余的方式可以提高生产效率 , 是一种空间换时间的思想应用 。
通过基础层的加工 , 数据全部沉淀到IDL层 , 同时写到olap引擎的基础层 , 再往上是实时汇总层计算 , 基于storm、flink或doris , 生产多维度的汇总指标 , 形成统一的汇总层 , 进行统一的存储分发 。
当这些功能都有了以后 , 元数据管理 , 指标管理 , 数据安全性、SLA、数据质量等系统能力也会逐渐构建起来 。
1. 实时基础层功能
美团外卖实时数仓建设实践文章插图


推荐阅读