加入收藏 | 设为首页 | 会员中心 | 我要投稿 南京站长网 (https://www.025zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

美团外卖实时数仓方案整理

发布时间:2022-10-15 22:00:58 所属栏目:大数据 来源:互联网
导读: 实时数仓以端到端低延迟、SQL标准化、快速响应变化、数据统一为目标。美团外卖数据智能组总结的最佳实践是:一个通用的实时生产平台跟一个通用交互式实时分析引擎相互配合,同时满足实时和

实时数仓以端到端低延迟、SQL标准化、快速响应变化、数据统一为目标。美团外卖数据智能组总结的最佳实践是:一个通用的实时生产平台跟一个通用交互式实时分析引擎相互配合,同时满足实时和准实时业务场景。两者合理分工,互相补充,形成易开发、易维护且效率高的流水线,兼顾开发效率与生产成本,以较好的投入产出比满足业务的多样性需求。

01 实时场景

美团外卖实时数仓方案整理

实时数据在美团外卖的场景是非常多的,主要有以下几个方面:

02 实时技术及架构1. 实时计算技术选型

目前,市面上已经开源的实时技术还是很多的,比较通用的有[Storm]、Spark Streaming以及[Flink],技术同学在做选型时要根据公司的具体业务来进行部署。

美团外卖依托于美团整体的基础数据体系建设,从技术成熟度来讲,公司前几年主要用的是Storm。当时的Storm,在性能稳定性、可靠性以及扩展性上也是无可替代的。但随着Flink越来越成熟,从技术性能上以及框架设计优势上已经超越了Storm,从趋势来讲就像Spark替代MR一样,Storm也会慢慢被Flink替代。当然,从Storm迁移到Flink会有一个过程,我们目前有一些老的任务仍然运行在Storm上,也在不断推进任务迁移。

美团外卖实时数仓方案整理

具体[Storm和Flink的对比]可以参考上图表格。

2. 实时架构

① Lambda架构

美团外卖实时数仓方案整理

Lambda是比较经典的一款架构,以前实时的场景不是很多,以离线为主,当附加了实时场景后,由于离线和实时的时效性不同,导致技术生态是不一样的。而Lambda架构相当于附加了一条实时生产链路,在应用层面进行一个整合,双路生产,各自独立。在业务应用中,顺理成章成为了一种被采用的方式。

双路生产会存在一些问题,比如加工逻辑Double,开发运维也会Double,资源同样会变成两个资源链路。因为存在以上问题,所以又演进了一个Kappa架构。

② Kappa架构

美团外卖实时数仓方案整理

Kappa从架构设计来讲,比较简单,生产统一,一套逻辑同时生产离线和实时。但是在实际应用场景有比较大的局限性,在业内直接用Kappa架构生产落地的案例不多见,且场景比较单一。这些问题在美团外卖这边同样会遇到,我们也会有自己的一些思考,将会在后面的章节进行阐述。

03 业务痛点

首先,在外卖业务上,我们遇到了一些问题和挑战。在业务早期大数据应用场景,为了满足业务需要,一般是Case By Case地先把需求完成。业务对于实时性要求是比较高的,从时效性的维度来说,没有进行中间层沉淀的机会。在这种场景下,一般是拿到业务逻辑直接嵌入,这是能想到的简单有效的方法,在业务发展初期这种开发模式也比较常见。

美团外卖实时数仓方案整理

如上图所示,拿到数据源后,我们会经过数据清洗、扩维,通过Storm或Flink进行业务逻辑处理,最后直接进行业务输出。把这个环节拆开来看,数据源端会重复引用相同的数据源,后面进行清洗、过滤、扩维等操作,都要重复做一遍。唯一不同的是业务的代码逻辑是不一样的,如果业务较少,这种模式还可以接受,但当后续业务量上去后,会出现谁开发谁运维的情况,维护工作量会越来越大,作业无法形成统一管理。而且所有人都在申请资源,导致资源成本急速膨胀,资源不能集约有效利用,因此要思考如何从整体来进行实时数据的建设。

04 数据特点与应用场景

那么如何来构建实时数仓呢?首先要进行拆解,有哪些数据,有哪些场景,这些场景有哪些共同特点,对于外卖场景来说一共有两大类,日志类和业务类。

[En]

So how to build a real-time data warehouse? First of all, we need to disassemble the data, what are the scenarios, and what are the common characteristics of these scenarios? for takeout scenarios, there are two categories: log class and business class.

美团外卖实时数仓方案整理

而业务类实时处理,主要面临的以下几个难点:

日志类和业务类的场景一般是同时存在的,交织在一起,无论是Lambda架构还是Kappa架构,单一的应用都会有一些问题。因此针对场景来选择架构与实践才更有意义。

05 实时数仓架构设计1. 实时架构:流批结合的探索

基于以上问题,我们有自己的思考。通过流批结合的方式来应对不同的业务场景。

[En]

Based on the above problems, we have our own thinking. Through the combination of streaming batches to deal with different business scenarios.

美团外卖实时数仓方案整理

如上图所示,数据从日志统一采集到消息队列,再到数据流的ETL过程,作为基础数据流的建设是统一的。之后对于日志类实时特征,实时大屏类应用走实时流计算。对于Binlog类业务分析走实时OLAP批处理。

流式处理分析业务的痛点是什么?对于范式业务,Storm和Flink都需要很大的外存,来实现数据流之间的业务对齐,需要大量的计算资源。且由于外存的限制,必须进行窗口的限定策略,最终可能放弃一些数据。计算之后,一般是存到Redis里做查询支撑,且KV存储在应对分析类查询场景中也有较多局限。

实时OLAP怎么实现?有没有一种自带存储的实时计算引擎,当实时数据来了之后,可以灵活的在一定范围内自由计算,并且有一定的数据承载能力,同时支持分析查询响应呢?随着技术的发展,目前MPP引擎发展非常迅速,性能也在飞快提升,所以在这种场景下就有了一种新的可能。这里我们使用的是Doris引擎。

这种想法在业内也已经有实践,且成为一个重要探索方向。阿里基于ADB的实时OLAP方案等。

2. 实时数仓架构设计

从整个实时数仓架构来看,首先考虑的是如何管理所有的实时数据,资源如何有效整合,数据如何进行建设。

[En]

From the perspective of the whole real-time warehouse architecture, the first consideration is how to manage all real-time data, how to effectively integrate resources, and how to build data.

从方法论来讲,实时和离线是非常相似的。离线数仓早期的时候也是Case By Case,当数据规模涨到一定量的时候才会考虑如何治理。分层是一种非常有效的数据治理方式,所以在实时数仓如何进行管理的问题上,首先考虑的也是分层的处理逻辑,具体内容如下:

总结起来,从整个实时数仓的建设角度来讲,首先数据建设的层次化要先建出来,先搭框架,然后定规范,每一层加工到什么程度,每一层用什么样的方式,当规范定义出来后,便于在生产上进行标准化的加工。由于要保证时效性,设计的时候,层次不能太多,对于实时性要求比较高的场景,基本可以走上图左侧的数据流,对于批量处理的需求,可以从实时明细层导入到实时OLAP引擎里,基于OLAP引擎自身的计算和查询能力进行快速的回撤计算,如上图右侧的数据流。

06 实时平台化建设

架构确定之后,我们后面考虑的是如何进行平台化的建设,实时平台化建设是完全附加于实时数仓管理之上进行的。

[En]

After the architecture is determined, what we consider later is how to build a platform, which is completely attached to the real-time warehouse management.

首先进行功能的抽象,把功能抽象成组件,这样就可以达到标准化的生产,系统化的保障就可以更深入的建设,对于基础加工层的清洗、过滤、合流、扩维、转换、加密、筛选等功能都可以抽象出来,基础层通过这种组件化的方式构建直接可用的数据结果流。这会产生一个问题,用户的需求多样,为了满足了这个用户,如何兼容其他的用户,因此可能会出现冗余加工的情况。从存储的维度来讲,实时数据不存历史,不会消耗过多的存储,这种冗余是可以接受的,通过冗余的方式可以提高生产效率,是一种 以空间换时间思想的应用。

[En]

First of all, the function is abstracted, and the function is abstracted into components, so that standardized production can be achieved, and systematic guarantee can be further constructed. the functions of cleaning, filtering, confluence, dimension expansion, transformation, encryption and filtering in the basic processing layer can be abstracted, and the basic layer constructs a directly available data result stream in this component-based way. This will give rise to a problem, the needs of users are diverse, in order to meet this user, how to be compatible with other users, so there may be redundant processing. In terms of storage dimension, real-time data does not have a history and will not consume too much storage. This redundancy is acceptable and can improve production efficiency by way of redundancy. It is an application of the idea of exchanging space for time.

通过基础层的加工,数据全部沉淀到IDL层,同时写到OLAP引擎的基础层,再往上是实时汇总层计算,基于Storm、Flink或Doris,生产多维度的汇总指标,形成统一的汇总层,进行统一的存储分发。

当这些功能都有了以后,元数据管理,指标管理,数据安全性、SLA、数据质量等系统能力也会逐渐构建起来。

1. 实时基础层功能

实时基础层的建设要解决一些问题。首先是一条流重复读的问题,一条Binlog打过来,是以DB包的形式存在的,用户可能只用其中一张表,如果大家都要用,可能存在所有人都要接这个流的问题。解决方案是可以按照不同的业务解构出来,还原到基础数据流层,根据业务的需要做成范式结构,按照数仓的建模方式进行集成化的主题建设。

其次要进行组件的封装,比如基础层的清洗、过滤、扩维等功能,通过一个很简单的表达入口,让用户将逻辑写出来。数据转换环节是比较灵活的,比如从一个值转换成另外一个值,对于这种自定义逻辑表达,我们也开放了自定义组件,可以通过Java或Python开发自定义脚本,进行数据加工。

2. 实时特征生产功能

特征生产可以通过SQL语法进行逻辑表达,底层进行逻辑的适配,透传到计算引擎,屏蔽用户对计算引擎的依赖。就像对于离线场景,目前大公司很少通过代码的方式开发,除非一些特别的Case,所以基本上可以通过SQL化的方式表达。

美团外卖实时数仓方案整理

在功能层面,把指标管理的思想融合进去,原子指标、派生指标,标准计算口径,维度选择,窗口设置等操作都可以通过配置化的方式,这样可以统一解析生产逻辑,进行统一封装。

[En]

At the functional level, the idea of index management is integrated, atomic indicators, derived indicators, standard calculation caliber, dimension selection, window setting and other operations can be configured, so that the production logic can be analyzed uniformly and packaged uniformly.

还有一个问题,同一个源,写了很多SQL,每一次提交都会起一个数据流,比较浪费资源,我们的解决方案是,通过同一条流实现动态指标的生产,在不停服务的情况下可以动态添加指标。

所以在实时平台建设过程中,更多考虑的是如何更有效的利用资源,在哪些环节更能节约化的使用资源,这是在工程方面更多考虑的事情。

[En]

Therefore, in the process of real-time platform construction, more consideration is given to how to make more effective use of resources and which links can be more economical in the use of resources, which is more considered in engineering.

3. SLA建设

SLA主要解决两个问题,一个是端到端的SLA,一个是作业生产效率的SLA,我们采用埋点+上报的方式,由于实时流比较大,埋点要尽量简单,不能埋太多的东西,能表达业务即可,每个作业的输出统一上报到SLA监控平台,通过统一接口的形式,在每一个作业点上报所需要的信息,最后能够统计到端到端的SLA。

美团外卖实时数仓方案整理

在实时生产中,由于链路非常长,无法控制所有链路,但是可以控制自己作业的效率,所以作业SLA也是必不可少的。

4. 实时OLAP方案

问题

解决方案

通过带计算能力的OLAP引擎来解决,不需要把一个流进行逻辑化映射,只需要解决数据实时稳定的入库问题。

美团外卖实时数仓方案整理

我们这边采用的是Doris作为高性能的OLAP引擎,由于业务数据产生的结果和结果之间还需要进行衍生计算,Doris可以利用Unique模型或聚合模型快速还原业务,还原业务的同时还可以进行汇总层的聚合,也是为了复用而设计。应用层可以是物理的,也可以是逻辑化视图。

这种模式重在解决业务回撤计算,比如业务状态改变,需要在历史的某个点将值变更,这种场景用流计算的成本非常大,OLAP模式可以很好的解决这个问题。

07 实时应用案例

最后通过一个案例说明,比如商家要根据用户历史下单数给用户优惠,商家需要看到历史下了多少单,历史T+1的数据要有,今天实时的数据也要有,这种场景是典型的Lambda架构。我们可以在Doris里设计一个分区表,一个是历史分区,一个是今日分区,历史分区可以通过离线的方式生产,今日指标可以通过实时的方式计算,写到今日分区里,查询的时候进行一个简单的汇总。

美团外卖实时数仓方案整理

这种场景看起来比较简单,难点在于商家的量上来之后,很多简单的问题都会变得复杂。后续,我们也会通过更多的业务输入,沉淀出更多的业务场景,抽象出来形成统一的生产方案和功能,以最小化的实时计算资源支撑多样化的业务需求,这也是未来我们需要达到的目的。

[En]

This kind of scenario looks relatively simple, but the difficulty is that after the quantity of the merchant, many simple problems will become complicated. In the future, through more business input, we will precipitate more business scenarios and abstract them to form a unified production plan and functions to minimize real-time computing resources to support diversified business requirements. This is what we need to achieve in the future.

Original:

Author: 独孤风

Title: 美团外卖实时数仓方案整理

(编辑:南京站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!