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

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

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

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

实时计算平台

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

实时计算平台架构

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

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

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

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

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

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

业务数仓实践

流量

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

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

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

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

广告实时效果

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

即时配送

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

总结

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

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

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

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

传统数仓模型

为了更有效地组织和管理数据,数仓建设往往会进行数据分层,一般自下而上分为四层:ODS(操作数据层)、DWD(数据明细层)、DWS(汇总层)和应用层。即时查询主要通过 Presto、Hive 和 Spark 实现。

实时数仓模型

实时数仓的分层方式一般也遵守传统数据仓库模型,也分为了 ODS 操作数据集、DWD 明细层和 DWS 汇总层以及应用层。但实时数仓模型的处理的方式却和传统数仓有所差别,如明细层和汇总层的数据一般会放在 Kafka 上,维度数据一般考虑到性能问题则会放在 HBase 或者 Tair 等 KV 存储上,即席查询则可以使用 Flink 完成。

准实时数仓模型

在以上两种数仓模型之外,我们发现业务方在实践过程中还有一种准实时数仓模型,其特点是不完全基于流去做,而是将明细层数据导入到 OLAP 存储中,基于 OLAP 的计算能力去做汇总并进行进一步的加工。

实时数仓和传统数仓的对比

实时数仓和传统数仓的对比主要可以从四个方面考虑:

  • 第一个是分层方式,离线数仓为了考虑到效率问题,一般会采取空间换时间的方式,层级划分会比较多;则实时数仓考虑到实时性问题,一般分层会比较少,另外也减少了中间流程出错的可能性。
  • 第二个是事实数据存储方面,离线数仓会基于 HDFS,实时数仓则会基于消息队列(如 Kafka)。
  • 第三个是维度数据存储,实时数仓会将数据放在 KV 存储上面。
  • 第四个是数据加工过程,离线数仓一般以 Hive、Spark 等批处理为主,而实时数仓则是基于实时计算引擎如 Storm、Flink 等,以流处理为主。

实时数仓建设方案对比

下图中对于实时数仓的两种建设方式,即准实时数仓和实时数仓两种方式进行了对比。它们的实现方式分别是基于 OLAP 引擎和流计算引擎,实时度则分别是分钟和秒级。

  • 调度开销方面,准实时数仓是批处理过程,因此仍然需要调度系统支持,虽然调度开销比离线数仓少一些,但是依然存在,而实时数仓却没有调度开销。
  • 业务灵活性方面,因为准实时数仓基于 OLAP 引擎实现,灵活性优于基于流计算的方式。
  • 在对数据晚到的容忍度方面,因为准实时数仓可以基于一个周期内的数据进行全量计算,因此对于数据晚到的容忍度也是比较高的,而实时数仓使用的是增量计算,对于数据晚到的容忍度更低一些。
  • 扩展性方面,因为准实时数仓的计算和存储是一体的,因此相比于实时数仓,扩展性更弱一些。
  • 适用场景方面,准实时数仓主要用于有实时性要求但不太高、数据量不大以及多表关联复杂和业务变更频繁的场景,如交易类型的实时分析,实时数仓则更适用于实时性要求高、数据量大的场景,如实时特征、流量分发以及流量类型实时分析。

总结一下,基于 OLAP 引擎的建设方式是数据量不太大,业务流量不太高情况下为了提高时效性和开发效率的一个折中方案,从未来的发展趋势来看,基于流计算的实时数仓更具有发展前景。

一站式解决方案

从业务实践过程中,我们看到了业务建设实时数仓的共同需求,包括发现不同业务的元数据是割裂的,业务开发也倾向于使用 SQL 方式同时开发离线数仓和实时数仓,需要更多的运维工具支持。因此我们规划了一站式解决方案,希望能够将整个流程贯通。

这里的一站式解决方案主要为用户提供了数据开发工作平台、元数据管理。同时我们考虑到业务从生产到应用过程中的问题,我们 OLAP 生产平台,从建模方式、生产任务管理和资源方面解决 OLAP 生产问题。左侧是我们已经具备数据安全体系、资源体系和数据治理,这些是离线数仓和实时数仓可以共用的。

为何选择 Flink?

实时数仓平台建设之所以选择 Flink 是基于以下四个方面的考虑,这也是实时数仓方面关注的比较核心的问题。

  • 第一个是状态管理,实时数仓里面会进行很多的聚合计算,这些都需要对于状态进行访问和管理,Flink 在这方面比较成熟。
  • 第二个是表义能力,Flink 提供极为丰富的多层次 API,包括 Stream API、Table API 以及 Flink SQL。
  • 第三个是生态完善,实时数仓的用途广泛,用户对于多种存储有访问需求,Flink 对于这方面的支持也比较完善。
  • 最后一点就是 Flink 提供了流批统一的可能性。

实时数仓平台

建设思路

实时数仓平台的建设思路从外到内分为了四个层次,我们认为平台应该做的事情是为用户提供抽象的表达能力,分别是消息表达、数据表达、计算表达以及流和批统一。

实时数仓平台架构

如下图所示的是美团点评的实时数仓平台架构,从下往上看,资源层和存储层复用了实时计算平台的能力,在引擎层则会基于 Flink Streaming 实现一些扩展能力,包括对 UDF 的集成和 Connector 的集成。再往上是基于 Flink SQL 独立出来的 SQL 层,主要负责解析、校验和优化。在这之上是平台层,包括开发工作台、元数据、UDF 平台以及 OLAP 平台。最上层则是平台所支持的实时数仓的应用,包括实时报表、实时 OLAP、实时 Dashboard 和实时特征等。

消息表达-数据接入

在消息表达层面,因为 Binlog、埋点日志、后端日志以及 IoT 数据等的数据格式是不一致的,因此美团点评的实时数仓平台提供数据接入的流程,能够帮助大家把数据同步到 ODS 层。这里主要实现了两件事情,分别是统一消息协议和屏蔽处理细节。

如下图左侧是接入过程的一个例子,对于 Binlog 类型数据,实时数仓平台还为大家提供了分库分表的支持,能够将属于同一个业务的不同的分库分表数据根据业务规则收集到同一个 ODS 表中去。

计算表达-扩展 DDL

美团点评实时数仓平台基于 Flink 扩展了 DDL,这部分工作的主要目的是建设元数据体系,打通内部的主流实时存储,包括 KV 数据、OLAP 数据等。由于开发工作台和元数据体系是打通的,因此很多数据的细节并不需要大家在 DDL 中明确地声明出来,只需要在声明中写上数据的名字,和运行时的一些设置,比如 MQ 从最新消费还是最旧消费或者从某个时间戳消费即可,其他的数据访问方式是一致的。

计算表达-UDF 平台

对于 UDF 平台而言,需要从三个层面考虑:

  • 首先是数据安全性。之前的数仓建设过程中,用户可以上传 Jar 包去直接引用 UDF,这样做是有危险性存在的,并且我们无法知道数据的流向。从数据安全的角度来考虑,平台会进行代码审计和血缘关系分析,对于历史风险组件或者存在问题的组件可以进行组件收敛。
  • 第二个层面,在数据安全基础上我们还会关注 UDF 的运行质量,平台将会为用户提供模板、用例以及测试的管理,为用户屏蔽编译打包、Jar 包管理的过程,并且会在 UDF 模板中进行指标日志的埋点和异常处理。
  • 第三个层面是 UDF 的复用能力,因为一个业务方开发的 UDF,其他业务方很可能也会使用,但是升级过程中可能会带来不兼容的问题,因此,平台为业务提供了项目管理、函数管理和版本管理的能力。

UDF 的应用其实非常广泛,UDF 平台并不是只支持实时数仓,也会同时支持离线数仓、机器学习以及查询服务等应用场景。下图中右侧展示的是 UDF 的使用案例,左图是 UDF 的开发流程,用户只需要关心注册流程,接下来的编译打包、测试以及上传等都由平台完成;右图是 UDF 的使用流程中,用户只需要声明 UDF,平台会进行解析校验、路径获取以及在作业提交的时候进行集成。

实时数仓平台-Web IDE

最后介绍一下实时数仓平台的开发工作台,以 Web IDE 的形式集成了模型、作业以及 UDF 的管理,用户可以在 Web IDE 上以 SQL 方式开发。平台会对 SQL 做一些版本的管理,并且支持用户回退到已部署成功的版本上去。

三、未来发展与思考

资源自动调优

从整个实时计算角度来考虑,目前美团点评的实时计算平台的节点数已经达到了几千台,未来很可能会达到上万台,因此资源优化这件事情很快就会被提上日程。由于业务本身的流量存在高峰和低谷,对于一个实时任务来说,可能在高峰时需要很多资源,但是在低谷时并不需要那么多资源。

另外一方面,波峰本身也是会发生变化的,有可能随着业务的上涨使得原来分配的资源数量不够用。因此,资源自动调优有两个含义,一个是指能够适配作业的高峰流量上涨,自动适配 Max 值;另外一个含义是指使得作业能够在高峰过去之后自动适应流量减少,能够快速缩容。我们可以通过每个任务甚至是算子的历史运行情况,拟合得到算子、流量与资源的关系函数,在流量变化时同步调整资源量。

以上是资源优化的思路,除此之外还需要考虑当资源完成优化之后应该如何利用。为了保证可用性,实时和离线任务一般会分开部署,否则带宽、IO 都可能被离线计算打满导致实时任务延迟。而从资源使用率角度出发,则需要考虑实时和离线的混合部署,或者以流的方式来处理一些实时性要求并不是非常高的任务。这就要求更细粒度的资源隔离和更快的资源释放。

推动实时数仓建设方式升级

实时数仓的建设一般分为几个步骤:

  • 首先,业务提出需求,后续会进行设计建模、业务逻辑开发和底层技术实现。美团点评的实时数仓建设思路是将技术实现统一表达,让业务关注逻辑开发,而逻辑开发也可以基于配置化手段实现自动构建。
  • 再上一层是可以根据业务需求实现智能建模,将设计建模过程实现自动化。

目前,美团点评的实时数仓平台建设工作还集中在统一表达的层次,距离理想状态仍然有比较长的一段路要走。


原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

koa-generator 快速生成 koa2 服务的脚手架工具

文章目录1. 全局安装脚手架工具2. 执行生成3. 安装依赖4. 启动服务5. 默认的访问地址通常我们可以借助于脚手架,快速创建一个Koa2项目,当然也可以自己从头搭建;脚手架会帮我们提前搭好基本的架子 1. 全局安装脚手架工具 cnpm install -g koa…

轻松搭建基于 SpringBoot + Vue 的 Web 商城应用

首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源&#xff…

股市中的Santa Claus Rally (圣诞节行情)

圣诞节行情 Santa Claus Rally Santa Claus Rally 是指 12 月 25 日圣诞节前后股市的持续上涨这样一个现象。《股票交易员年鉴》的创始人 Yale Hirsch 于 1972 年创造了这个定义,他将当年最后五个交易日和次年前两个交易日的时间范围定义为反弹日期。 根据 CFRA Re…

没想到!!Unicode 字符还能这样玩?

来源 | 程序通事责编 |晋兆雨头图 | CSDN 付费下载自视觉中国上周的时候,朋友圈的直升飞机不知道为什么就火了,很多朋友开着各种花式飞机带着起飞。图片来自网络还没来得及了解咋回事来着,这个直升飞机就????到的微博热搜。图片来自网络后…

为什么 APP 纷纷开发“暗黑模式”?优酷最佳实践总结

一、缘起 随着iOS 13和Android 10的正式发布,一个名词"暗黑模式(Dark Mode)"逐渐走入了大家的视野。各大APP都将暗黑模式的适配列入了开发日程,舆情上用户们对暗黑模式支持的呼声也非常的高。优酷主客也顺应时势,启动了相应的技术…

Mongo 安装、配置、启动 Windows

文章目录一、Mongo 安装1. Mongo 下载2. 安装3. 配置环境变量4. 验证5. 连接二、Mongo 配置2.1. 编辑mongod.cfg2.2. 修改dbPath2.3. systemLog路径2.4. 启动Mongod服务2.5. 安装MongoDB服务2.6. 验证一、Mongo 安装 1. Mongo 下载 下载Mongo数据库并安装 https://www.mongod…

混合云存储阵列与云存储网关的协同解决方案

前言 混合云存储阵列(CSA)于2017年云栖大会发布,上市2年多,已经被基因测序,医疗PACS,影视制作,非编,广电,视频监控等行业和场景的客户广泛采用。混合云存储阵列承载了用户…

炸裂!Google这波操作,预警了什么?

我们都知道谷歌爸爸收购了Cask Data一家公司。长期以来,谷歌致力于推动围绕 GoogleCloud 的企业业务,但在这方面一直被亚马逊和微软吊打,这次的收购正是为了弥补自身的短板。被收购的 Cask Data 是一家专门提供基于Hadoop的大型数据分析服务解…

Robo 3T 安装连接 MongoDB

文章目录1. 官网2.安装3. 连接 MongoDB1. 官网 https://robomongo.org 2.安装 3. 连接 MongoDB

何为真正的 FaaS ?阿里舜天平台做了四大创新

导读:数据中心和云计算的超高增速,AI、视频、基因测序等应用对于算力的无尽渴求和摩尔定律发展事实上已经停滞的现实,均给异构加速带来了巨大的应用潜力和商机。但 Faas 解决方案仍有较高的门槛,今天,我们一起了解 Faa…

SOA为什么不“香”了? | 大咖说中台

作者 | 耿立超责编 | 晋兆雨来源 | 《大数据平台架构与原型实现:数据中台建设实战》SOA 所有的理念都是基于现有应用系统展开的,不管是对服务的梳理还是服务之间的交互,都是以现有应用系统为载体的,中台不同于SOA 的地方在于&…

看到抖音上Python工程师晒得工资条,我沉默了......

我是个抖音中毒者闲来无事就喜欢刷抖音最近刷到了一个Python工程师的工资条然后我默默的打开看了然后就默默的关闭了如今Python技术由于大数据、人工智能的兴起Python也越来越火大家都纷纷学Python我不能跟你确保说学完Python你就能拿高工资但是你学完Python肯定有饭吃说不定还…

不用 H5,闲鱼 Flutter 如何玩转小游戏?

阿里妹导读:最近APP游戏化成为了一个新的风口,把在游戏中一些好玩的、能吸引用户的娱乐方式或场景应用在应用当中,以达到增加用户粘性,提升DAU的效果,成本较低。同时在一些需要对用户有引导性的场景,游戏化…

阿里巴巴向全社会开放黑科技:“泡在水里”的服务器

为了让数据中心更绿色,阿里工程曾将服务器“泡在水里”进行散热,节能超70%,今天这项黑科技的神秘面纱被揭开。 2020年1月6日,阿里巴巴宣布将“浸没式液冷数据中心技术规范”向全社会开放。这项规范旨在用一套标准流程为下一代绿色…

VS Code vue 模板

我们希望每次新建.vue文件后,VSCODE能够根据配置,自动生成我们想要的内容。 打开VSCODE编辑器,依次选择“文件 -> 首选项 -> 用户代码片段”,此时,会弹出一个搜索框,我们输入vue, 如下&am…

程序员必备基础:Git 命令全方位学习

来源 | 捡田螺的小男孩责编 | Carol封图 | CSDN 下载自视觉中国掌握Git命令是每位程序员必备的基础,之前一直是用smartGit工具,直到看到大佬们都是在用Git命令操作的,回想一下,发现有些Git命令我都忘记了,于是写了这篇…

eBay邓明:dubbo-go 中 metrics 的设计

最近因为要在 Apache/dubbo-go(以下简称 dubbo-go )里面实现类似的这个 metrics 功能,于是花了很多时间去了解现在 Dubbo 里面的 metrics 是怎么实现的。该部分,实际上是被放在一个独立的项目里面,即 metrics 。 总体…

稳定性专题 | Spring Boot 常见错误及解决方法

导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测、故障演练、JVM、应用容器、服务框架、流量调度、监控、诊断等多个技术领域,以更结构化的方式来打造稳定性领域的知识库。 Spring Boot 作为 Java…

vue3 线上环境 ctx 无法识别

解决方案: Vue3获取当前组件实例的 getCurrentInstance 方法上 ctx 生产获取不到 上面的全局方法, getCurrentInstance代表上下文,即当前实例。ctx相当于Vue2的this, 但是需要特别注意的是ctx代替this只适用于开发阶段,如果将项目…

新职业风口已至!人社部宣布这10个职业缺口近千万!

负责阿里小蜜产品的陈海青是阿里最年轻的P9专家,才30岁出头,已经年入百万。小编的前领导,农村出身毫无背景,但是抓住风口卖掉了手里的比特币全款买了学区房,让他的孩子赢在起跑线上。面对这些踩在风口上的幸运儿&#…