美团点评基于 Flink 的实时数仓平台实践

简介: 数据仓库的建设是“数据智能”必不可少的一环,也是大规模数据应用中必然面临的挑战,而 Flink 实时数仓在数据链路中扮演着极为重要的角色。本文中,美团点评高级技术专家鲁昊为大家分享了美团点评基于 Apache Flink 的实时数仓平台实践。

作者:鲁昊@美团点评

一、美团点评实时计算演进

美团点评实时计算演进历程

在 2016 年,美团点评就已经基于 Storm 实时计算引擎实现了初步的平台化。2017 年初,我们引入了 Spark Streaming 用于特定场景的支持,主要是在数据同步场景方面的尝试。在 2017 年底,美团点评实时计算平台引入了 Flink。相比于 Storm 和 Spark Streaming,Flink 在很多方面都具有优势。这个阶段我们进行了深度的平台化,主要关注点是安全、稳定和易用。从 19 年开始,我们致力于建设包括实时数仓、机器学习等特定场景的解决方案来为业务提供更好的支持。

美团点评基于 Flink 的实时数仓平台实践

实时计算平台

目前,美团点评的实时计算平台日活跃作业数量为万级,高峰时作业处理的消息量达到每秒 1.5 亿条,而机器规模也已经达到了几千台,并且有几千位用户正在使用实时计算服务。

美团点评基于 Flink 的实时数仓平台实践

实时计算平台架构

如下图所示的是美团点评实时计算平台的架构。

  • 最底层是收集层,这一层负责收集用户的实时数据,包括 Binlog、后端服务日志以及 IoT 数据,经过日志收集团队和 DB 收集团队的处理,数据将会被收集到 Kafka 中。这些数据不只是参与实时计算,也会参与离线计算。
  • 收集层之上是存储层,这一层除了使用 Kafka 做消息通道之外,还会基于 HDFS 做状态数据存储以及基于 HBase 做维度数据的存储。
  • 存储层之上是引擎层,包括 Storm 和 Flink。实时计算平台会在引擎层为用户提供一些框架的封装以及公共包和组件的支持。
  • 在引擎层之上就是平台层了,平台层从数据、任务和资源三个视角去管理。
  • 架构的最上层是应用层
    ,包括了实时数仓、机器学习、数据同步以及事件驱动应用等。

本次分享主要介绍实时数仓方面的建设情况。

美团点评基于 Flink 的实时数仓平台实践

从功能角度来看,美团点评的实时计算平台主要包括作业和资源管理两个方面的功能。其中,作业部分包括作业配置、作业发布以及作业状态三个方面的功能。

  • 作业配置方面,则包括作业设置、运行时设置以及拓扑结构设置;
  • 作业发布方面,则包括版本管理、编译/发布/回滚等;
  • 作业状态则包括运行时状态、自定义指标和报警以及命令/运行时日志等。

在资源管理方面,则为用户提供了多租户资源隔离以及资源交付和部署的能力。

美团点评基于 Flink 的实时数仓平台实践

业务数仓实践

流量

前面提到,现在的美团点评实时计算平台更多地会关注在安全、易用和稳定方面,而应用上很大的一个场景就是业务数仓。接下来会为大家分享几个业务数仓的例子。

第一个例子是流量,流量数仓是流量类业务的基础服务,从业务通道而言,会有不同通道的埋点和不同页面的埋点数据,通过日志收集通道会进行基础明细层的拆分,按照业务维度划分不同的业务通道,如美团通道、外卖通道等。

基于业务通道还会进行一次更加细粒度的拆分,比如曝光日志、猜你喜欢、推荐等。以上这些包括两种使用方式,一种是以流的方式提供下游其他业务方使用,另外一方面就是做一些流量方面的实时分析。

下图中右边是流量数仓的架构图,自下向上分为四层,分别是 SDK 层,包括了前端、小程序以及 APP 的埋点;其上是收集层,埋点日志落地到 Nginx,通过日志收集通道收到 Kafka 中。在计算层,流量团队基于 Storm 能力实现了上层的 SQL 封装,并实现了 SQL 动态更新的特性,在 SQL 变更时不必重启作业。

美团点评基于 Flink 的实时数仓平台实践

广告实时效果

这里再举一个基于流量数仓的例子-广告实时效果验证。下图中左侧是广告实时效果的对比图。广告的打点一般分为请求(PV)打点、SPV(Server PV)打点、CPV(Client PV)曝光打点和 CPV 点击打点,在所有打点中都会包含一个流量的 requestID 和命中的实验路径。根据 requestID 和命中的实验路径可以将所有的日志进行 join,得到一个 request 中需要的所有数据,然后将数据存入 Durid 中进行分析,支持实际 CTR、预估 CTR 等效果验证。

美团点评基于 Flink 的实时数仓平台实践

即时配送

这里列举的另外一个业务数仓实践的例子是即时配送。实时数据在即时配送的运营策略上发挥了重要作用。以送达时间预估为例,交付时间衡量的是骑手送餐的交付难度,整个履约时间分为了多个时间段,配送数仓会基于 Storm 做特征数据的清洗、提取,供算法团队进行训练并得到时间预估的结果。这个过程涉及到商家、骑手以及用户的多方参与,数据的特征会非常多,数据量也会非常大。

美团点评基于 Flink 的实时数仓平台实践

总结

业务实时数仓大致分为三类场景:流量类、业务类和特征类,这三种场景各有不同。

  • 数据模型上,流量类是扁平化的宽表,业务数仓更多是基于范式的建模,特征数据是 KV 存储。
  • 数据来源区分,流量数仓的数据来源一般是日志数据;业务数仓的数据来源是业务 binlog 数据;特征数仓的数据来源则多种多样。
  • 数据量而言,流量和特征数仓都是海量数据,每天百亿级以上,而业务数仓的数据量一般每天百万到千万级。
  • 数据更新频率而言,流量数据极少更新,则业务和特征数据更新较多。流量数据一般关注时序和趋势,业务数据和特征数据关注状态变更。
  • 数据准确性上,流量数据要求较低,而业务数据和特征数据要求较高。
  • 模型调整频率上,业务数据调整频率较高,流量数据和特征数据调整频率较低。
美团点评基于 Flink 的实时数仓平台实践

二、基于 Flink 的实时数仓平台

上面为大家介绍了实时数仓的业务场景,接下来为大家介绍实时数仓的演进过程和美团点评的实时数仓平台建设思路。

点击“了解更多”解读基于 Flink 的实时数仓平台实践内容

关键词:存储、SQL、消息中间件、机器学习/深度学习、分布式计算、OLAP


分享到:


相關文章: