从 Storm 迁移到 Flink,美团外卖实时数仓建设实践( 四 )


实时基础层的建设要解决一些问题 。
首先是一条流重复读的问题 , 一条 Binlog 打过来 , 是以 DB 包的形式存在的 , 用户可能只用其中一张表 , 如果大家都要用 , 可能存在所有人都要接这个流的问题 。 解决方案是可以按照不同的业务解构出来 , 还原到基础数据流层 , 根据业务的需要做成范式结构 , 按照数仓的建模方式进行集成化的主题建设 。
其次要进行组件的封装 , 比如基础层的清洗、过滤、扩维等功能 , 通过一个很简单的表达入口 , 让用户将逻辑写出来 。 trans 环节是比较灵活的 , 比如从一个值转换成另外一个值 , 对于这种自定义逻辑表达 , 我们也开放了自定义组件 , 可以通过 Java 或 Python 开发自定义脚本 , 进行数据加工 。
2. 实时特征生产功能
从 Storm 迁移到 Flink,美团外卖实时数仓建设实践文章插图
特征生产可以通过 SQL 语法进行逻辑表达 , 底层进行逻辑的适配 , 透传到计算引擎 , 屏蔽用户对计算引擎的依赖 。 就像对于离线场景 , 目前大公司很少通过代码的方式开发 , 除非一些特别的 case , 所以基本上可以通过 SQL 化的方式表达 。
在功能层面 , 把指标管理的思想融合进去 , 原子指标、派生指标 , 标准计算口径 , 维度选择 , 窗口设置等操作都可以通过配置化的方式 , 这样可以统一解析生产逻辑 , 进行统一封装 。
还有一个问题 , 同一个源 , 写了很多 SQL , 每一次提交都会起一个数据流 , 比较浪费资源 , 我们的解决方案是 , 通过同一条流实现动态指标的生产 , 在不停服务的情况下可以动态添加指标 。
所以在实时平台建设过程中 , 更多考虑的是如何更有效的利用资源 , 在哪些环节更能节约化的使用资源 , 这是在工程方面更多考虑的事情 。
3. SLA 建设
从 Storm 迁移到 Flink,美团外卖实时数仓建设实践文章插图
SLA 主要解决两个问题 , 一个是端到端的 SLA , 一个是作业生产效率的 SLA , 我们采用埋点+上报的方式 , 由于实时流比较大 , 埋点要尽量简单 , 不能埋太多的东西 , 能表达业务即可 , 每个作业的输出统一上报到 SLA 监控平台 , 通过统一接口的形式 , 在每一个作业点上报所需要的信息 , 最后能够统计到端到端的 SLA 。
在实时生产中 , 由于链路非常长 , 无法控制所有链路 , 但是可以控制自己作业的效率 , 所以作业 SLA 也是必不可少的 。
4. 实时 OLAP 方案
从 Storm 迁移到 Flink,美团外卖实时数仓建设实践文章插图
问题:

  • Binlog 业务还原复杂:业务变化很多 , 需要某个时间点的变化 , 因此需要进行排序 , 并且数据要存起来 , 这对于内存和 CPU 的资源消耗都是非常大的 。
  • Binlog 业务关联复杂:流式计算里 , 流和流之间的关联 , 对于业务逻辑的表达是非常困难的 。
解决方案:
通过带计算能力的 OLAP 引擎来解决 , 不需要把一个流进行逻辑化映射 , 只需要解决数据实时稳定的入库问题 。
我们这边采用的是 Doris 作为高性能的 OLAP 引擎 , 由于业务数据产生的结果和结果之间还需要进行衍生计算 , Doris可以利用 unique 模型或聚合模型快速还原业务 , 还原业务的同时还可以进行汇总层的聚合 , 也是为了复用而设计 。 应用层可以是物理的 , 也可以是逻辑化视图 。
这种模式重在解决业务回撤计算 , 比如业务状态改变 , 需要在历史的某个点将值变更 , 这种场景用流计算的成本非常大 , OLAP 模式可以很好的解决这个问题 。
07 实时应用案例
从 Storm 迁移到 Flink,美团外卖实时数仓建设实践文章插图