数据仓库的建设是“数据智能”必不可少的一环,也是大规模数据应用中必然面临的挑战,而 Flink 实时数仓在数据链路中扮演着极为重要的角色。本文中,美团点评高级技术专家鲁昊为你们分享了美团点评基于 Apache Flink 的实时数仓平台实践。前端
做者:鲁昊@美团点评算法
更多2019 Flink Forward 大会视频>>>小程序
在 2016 年,美团点评就已经基于 Storm 实时计算引擎实现了初步的平台化。2017 年初,咱们引入了 Spark Streaming 用于特定场景的支持,主要是在数据同步场景方面的尝试。在 2017 年末,美团点评实时计算平台引入了 Flink。相比于 Storm 和 Spark Streaming,Flink 在不少方面都具备优点。这个阶段咱们进行了深度的平台化,主要关注点是安全、稳定和易用。从 19 年开始,咱们致力于建设包括实时数仓、机器学习等特定场景的解决方案来为业务提供更好的支持。后端
目前,美团点评的实时计算平台日活跃做业数量为万级,高峰时做业处理的消息量达到每秒 1.5 亿条,而机器规模也已经达到了几千台,而且有几千位用户正在使用实时计算服务。安全
以下图所示的是美团点评实时计算平台的架构。架构
本次分享主要介绍实时数仓方面的建设状况。框架
从功能角度来看,美团点评的实时计算平台主要包括做业和资源管理两个方面的功能。其中,做业部分包括做业配置、做业发布以及做业状态三个方面的功能。运维
在资源管理方面,则为用户提供了多租户资源隔离以及资源交付和部署的能力。机器学习
前面提到,如今的美团点评实时计算平台更多地会关注在安全、易用和稳定方面,而应用上很大的一个场景就是业务数仓。接下来会为你们分享几个业务数仓的例子。函数
第一个例子是流量,流量数仓是流量类业务的基础服务,从业务通道而言,会有不一样通道的埋点和不一样页面的埋点数据,经过日志收集通道会进行基础明细层的拆分,按照业务维度划分不一样的业务通道,如美团通道、外卖通道等。
基于业务通道还会进行一次更加细粒度的拆分,好比曝光日志、猜你喜欢、推荐等。以上这些包括两种使用方式,一种是以流的方式提供下游其余业务方使用,另一方面就是作一些流量方面的实时分析。
下图中右边是流量数仓的架构图,自下向上分为四层,分别是 SDK 层,包括了前端、小程序以及 APP 的埋点;其上是收集层,埋点日志落地到 Nginx,经过日志收集通道收到 Kafka 中。在计算层,流量团队基于 Storm 能力实现了上层的 SQL 封装,并实现了 SQL 动态更新的特性,在 SQL 变动时没必要重启做业。
这里再举一个基于流量数仓的例子-广告实时效果验证。下图中左侧是广告实时效果的对比图。广告的打点通常分为请求(PV)打点、SPV(Server PV)打点、CPV(Client PV)曝光打点和 CPV 点击打点,在全部打点中都会包含一个流量的 requestID 和命中的实验路径。根据 requestID 和命中的实验路径能够将全部的日志进行 join,获得一个 request 中须要的全部数据,而后将数据存入 Durid 中进行分析,支持实际 CTR、预估 CTR 等效果验证。
这里列举的另一个业务数仓实践的例子是即时配送。实时数据在即时配送的运营策略上发挥了重要做用。以送达时间预估为例,交付时间衡量的是骑手送餐的交付难度,整个履约时间分为了多个时间段,配送数仓会基于 Storm 作特征数据的清洗、提取,供算法团队进行训练并获得时间预估的结果。这个过程涉及到商家、骑手以及用户的多方参与,数据的特征会很是多,数据量也会很是大。
业务实时数仓大体分为三类场景:流量类、业务类和特征类,这三种场景各有不一样。
上面为你们介绍了实时数仓的业务场景,接下来为你们介绍实时数仓的演进过程和美团点评的实时数仓平台建设思路。
为了更有效地组织和管理数据,数仓建设每每会进行数据分层,通常自下而上分为四层:ODS(操做数据层)、DWD(数据明细层)、DWS(汇总层)和应用层。即时查询主要经过 Presto、Hive 和 Spark 实现。
实时数仓的分层方式通常也遵照传统数据仓库模型,也分为了 ODS 操做数据集、DWD 明细层和 DWS 汇总层以及应用层。但实时数仓模型的处理的方式却和传统数仓有所差异,如明细层和汇总层的数据通常会放在 Kafka 上,维度数据通常考虑到性能问题则会放在 HBase 或者 Tair 等 KV 存储上,即席查询则可使用 Flink 完成。
在以上两种数仓模型以外,咱们发现业务方在实践过程当中还有一种准实时数仓模型,其特色是不彻底基于流去作,而是将明细层数据导入到 OLAP 存储中,基于 OLAP 的计算能力去作汇总并进行进一步的加工。
实时数仓和传统数仓的对比主要能够从四个方面考虑:
下图中对于实时数仓的两种建设方式,即准实时数仓和实时数仓两种方式进行了对比。它们的实现方式分别是基于 OLAP 引擎和流计算引擎,实时度则分别是分钟和秒级。
总结一下,基于 OLAP 引擎的建设方式是数据量不太大,业务流量不过高状况下为了提升时效性和开发效率的一个折中方案,从将来的发展趋势来看,基于流计算的实时数仓更具备发展前景。
从业务实践过程当中,咱们看到了业务建设实时数仓的共同需求,包括发现不一样业务的元数据是割裂的,业务开发也倾向于使用 SQL 方式同时开发离线数仓和实时数仓,须要更多的运维工具支持。所以咱们规划了一站式解决方案,但愿可以将整个流程贯通。
这里的一站式解决方案主要为用户提供了数据开发工做平台、元数据管理。同时咱们考虑到业务从生产到应用过程当中的问题,咱们 OLAP 生产平台,从建模方式、生产任务管理和资源方面解决 OLAP 生产问题。左侧是咱们已经具有数据安全体系、资源体系和数据治理,这些是离线数仓和实时数仓能够共用的。
实时数仓平台建设之因此选择 Flink 是基于如下四个方面的考虑,这也是实时数仓方面关注的比较核心的问题。
实时数仓平台的建设思路从外到内分为了四个层次,咱们认为平台应该作的事情是为用户提供抽象的表达能力,分别是消息表达、数据表达、计算表达以及流和批统一。
以下图所示的是美团点评的实时数仓平台架构,从下往上看,资源层和存储层复用了实时计算平台的能力,在引擎层则会基于 Flink Streaming 实现一些扩展能力,包括对 UDF 的集成和 Connector 的集成。再往上是基于 Flink SQL 独立出来的 SQL 层,主要负责解析、校验和优化。在这之上是平台层,包括开发工做台、元数据、UDF 平台以及 OLAP 平台。最上层则是平台所支持的实时数仓的应用,包括实时报表、实时 OLAP、实时 Dashboard 和实时特征等。
在消息表达层面,由于 Binlog、埋点日志、后端日志以及 IoT 数据等的数据格式是不一致的,所以美团点评的实时数仓平台提供数据接入的流程,可以帮助你们把数据同步到 ODS 层。这里主要实现了两件事情,分别是统一消息协议和屏蔽处理细节。
以下图左侧是接入过程的一个例子,对于 Binlog 类型数据,实时数仓平台还为你们提供了分库分表的支持,可以将属于同一个业务的不一样的分库分表数据根据业务规则收集到同一个 ODS 表中去。
美团点评实时数仓平台基于 Flink 扩展了 DDL,这部分工做的主要目的是建设元数据体系,打通内部的主流实时存储,包括 KV 数据、OLAP 数据等。因为开发工做台和元数据体系是打通的,所以不少数据的细节并不须要你们在 DDL 中明确地声明出来,只须要在声明中写上数据的名字,和运行时的一些设置,好比 MQ 从最新消费仍是最旧消费或者从某个时间戳消费便可,其余的数据访问方式是一致的。
对于 UDF 平台而言,须要从三个层面考虑:
UDF 的应用其实很是普遍,UDF 平台并非只支持实时数仓,也会同时支持离线数仓、机器学习以及查询服务等应用场景。下图中右侧展现的是 UDF 的使用案例,左图是 UDF 的开发流程,用户只须要关心注册流程,接下来的编译打包、测试以及上传等都由平台完成;右图是 UDF 的使用流程中,用户只须要声明 UDF,平台会进行解析校验、路径获取以及在做业提交的时候进行集成。
最后介绍一下实时数仓平台的开发工做台,以 Web IDE 的形式集成了模型、做业以及 UDF 的管理,用户能够在 Web IDE 上以 SQL 方式开发。平台会对 SQL 作一些版本的管理,而且支持用户回退到已部署成功的版本上去。
从整个实时计算角度来考虑,目前美团点评的实时计算平台的节点数已经达到了几千台,将来极可能会达到上万台,所以资源优化这件事情很快就会被提上日程。因为业务自己的流量存在高峰和低谷,对于一个实时任务来讲,可能在高峰时须要不少资源,可是在低谷时并不须要那么多资源。
另一方面,波峰自己也是会发生变化的,有可能随着业务的上涨使得原来分配的资源数量不够用。所以,资源自动调优有两个含义,一个是指可以适配做业的高峰流量上涨,自动适配 Max 值;另一个含义是指使得做业可以在高峰过去以后自动适应流量减小,可以快速缩容。咱们能够经过每一个任务甚至是算子的历史运行状况,拟合获得算子、流量与资源的关系函数,在流量变化时同步调整资源量。
以上是资源优化的思路,除此以外还须要考虑当资源完成优化以后应该如何利用。为了保证可用性,实时和离线任务通常会分开部署,不然带宽、IO 均可能被离线计算打满致使实时任务延迟。而从资源使用率角度出发,则须要考虑实时和离线的混合部署,或者以流的方式来处理一些实时性要求并非很是高的任务。这就要求更细粒度的资源隔离和更快的资源释放。
实时数仓的建设通常分为几个步骤:
目前,美团点评的实时数仓平台建设工做还集中在统一表达的层次,距离理想状态仍然有比较长的一段路要走。