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

简介: 本文主要介绍一种通用的实时数仓构建的方法与实践。实时数仓以端到端低延迟、SQL 标准化、快速响应变化、数据统一为目标。

作者:朱良

本文主要介绍一种通用的实时数仓构建的方法与实践。实时数仓以端到端低延迟、SQL 标准化、快速响应变化、数据统一为目标。

在实践中,我们总结的最佳实践是:一个通用的实时生产平台 + 一个通用交互式实时分析引擎相互配合同时满足实时和准实时业务场景。两者合理分工,互相补充,形成易于开发、易于维护、效率最高的流水线,兼顾开发效率与生产成本,以较好的投入产出比满足业务多样需求。

01 实时场景

1.jpg

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

  • 运营层面:比如实时业务变化,实时营销效果,当日营业情况以及当日实时业务趋势分析等。
  • 生产层面:比如实时系统是否可靠,系统是否稳定,实时监控系统的健康状况等。
  • C 端用户:比如搜索推荐排序,需要实时了解用户的想法,行为、特点,给用户推荐更加关注的内容。
  • 风控侧:在外卖以及金融科技用的是非常多的,实时风险识别,反欺诈,异常交易等,都是大量应用实时数据的场景

02 实时技术及架构

1. 实时计算技术选型

2.jpg

目前开源的实时技术比较多,比较通用的是 Storm、Spark Streaming 以及 Flink,具体要根据不同公司的业务情况进行选型。

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

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

2. 实时架构

① Lambda 架构

3.jpg

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

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

② Kappa 架构

4.jpg

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

03 业务痛点

5.jpg

在外卖业务上,我们也遇到了一些问题。

业务早期,为了满足业务需要,一般是拿到需求后 case by case 的先把需求完成,业务对于实时性要求是很高的,从时效性来说,没有进行中间层沉淀的机会,在这种场景下,一般是拿到业务逻辑直接嵌入,这是能想到的简单有效的方法,在业务发展初期这种开发模式比较常见。

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

04 数据特点与应用场景

6.jpg

那么如何来构建实时数仓呢?

首先要进行拆解,有哪些数据,有哪些场景,这些场景有哪些共同特点,对于外卖场景来说一共有两大类,日志类和业务类。

  • 日志类:数据量特别大,半结构化,嵌套比较深。日志类的数据有个很大的特点,日志流一旦形成是不会变的,通过埋点的方式收集平台所有的日志,统一进行采集分发,就像一颗树,树根非常大,推到前端应用的时候,相当于从树根到树枝分叉的过程(从 1 到 n 的分解过程),如果所有的业务都从根上找数据,看起来路径最短,但包袱太重,数据检索效率低。日志类数据一般用于生产监控和用户行为分析,时效性要求比较高,时间窗口一般是 5min 或 10min 或截止到当前的一个状态,主要的应用是实时大屏和实时特征,例如用户每一次点击行为都能够立刻感知到等需求。
  • 业务类:主要是业务交易数据,业务系统一般是自成体系的,以 Binlog 日志的形式往下分发,业务系统都是事务型的,主要采用范式建模方式,特点是结构化的,主体非常清晰,但数据表较多,需要多表关联才能表达完整业务,因此是一个 n 到 1 的集成加工过程。

业务类实时处理面临的几个难点:

  • 业务的多状态性:业务过程从开始到结束是不断变化的,比如从下单->支付->配送,业务库是在原始基础上进行变更的,binlog 会产生很多变化的日志。而业务分析更加关注最终状态,由此产生数据回撤计算的问题,例如 10 点下单,13 点取消,但希望在 10 点减掉取消单。
  • 业务集成:业务分析数据一般无法通过单一主体表达,往往是很多表进行关联,才能得到想要的信息,在实时流中进行数据的合流对齐,往往需要较大的缓存处理且复杂。
  • 分析是批量的,处理过程是流式的:对单一数据,无法形成分析,因此分析对象一定是批量的,而数据加工是逐条的。

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

05 实时数仓架构设计

1. 实时架构:流批结合的探索

7.jpg

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

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

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

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

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

2. 实时数仓架构设计

8.jpg

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

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

  • 数据源:在数据源的层面,离线和实时在数据源是一致的,主要分为日志类和业务类,日志类又包括用户日志,DB 日志以及服务器日志等。
  • 实时明细层:在明细层,为了解决重复建设的问题,要进行统一构建,利用离线数仓的模式,建设统一的基础明细数据层,按照主题进行管理,明细层的目的是给下游提供直接可用的数据,因此要对基础层进行统一的加工,比如清洗、过滤、扩维等。
  • 汇总层:汇总层通过 Flink 或 Storm 的简洁算子直接可以算出结果,并且形成汇总指标池,所有的指标都统一在汇总层加工,所有人按照统一的规范管理建设,形成可复用的汇总结果。

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

06 实时平台化建设

9.jpg

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

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

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

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

1. 实时基础层功能

10.jpg

实时基础层的建设要解决一些问题。

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

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

2. 实时特征生产功能

11.jpg

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

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

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

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

3. SLA 建设

12.jpg

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

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

4. 实时 OLAP 方案

13.jpg

问题:

  • Binlog 业务还原复杂:业务变化很多,需要某个时间点的变化,因此需要进行排序,并且数据要存起来,这对于内存和 CPU 的资源消耗都是非常大的。
  • Binlog 业务关联复杂:流式计算里,流和流之间的关联,对于业务逻辑的表达是非常困难的。

解决方案:

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

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

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

07 实时应用案例

14.jpg

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

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

 

 

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

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

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

相关文章

Arm发布移动端v9体系新架构,CPU、GPU、IP全囊括了!

2021年5月25日晚,Arm发布了针对移动端的Armv9体系新架构,除了公布首款全面计算(Total Compute)解决方案,Arm还发布了首批基于Armv9 架构的Cortex-A CPU,为消费电子视觉体验而设计的Mali-G GPU系列&#xff…

阿里 双11 同款,流量防卫兵 Sentinel go 源码解读

简介: 本文主要分析阿里巴巴集团开源的流量控制中间件 Sentinel,其原生支持了 Java/Go/C 等多种语言,本文仅仅分析其 Go 语言实现。下文如无特殊说明,sentinel 指代 Sentinel-Go。 作者 | 于雨 apache/dubbo-go 项目负责人 本文…

工业发展 安全护航 2021年工业互联网安全发展峰会成功召开

在数字化创新日益深入的背景下,工业互联网已经成为制造企业构建敏捷、弹性的基础架构的重要转型方向。但与此同时,安全风险与威胁向OT环境渗透,产生了额外的复杂性,对于关键业务与数据带来了严重威胁,构建工业互联网安…

基于 Flink + ClickHouse 打造轻量级点击流实时数仓

作者:LittleMagic Flink 和 ClickHouse 分别是实时计算和(近实时)OLAP 领域的翘楚,也是近些年非常火爆的开源框架,很多大厂都在将两者结合使用来构建各种用途的实时平台,效果很好。关于两者的优点就不再赘…

Spring boot 2.3优雅下线,距离生产还有多远?

简介: 对于任何一个线上应用,如何在服务更新部署过程中保证业务无感知是开发者必须要解决的问题,即从应用停止到重启恢复服务这个阶段不能影响正常的业务请求,这使得无损下线成为应用生命周期中必不可少的一个环节。 前言 在生产…

发布 128 核 Altra Max,自研内核,明年推出 5nm 处理器,“性能怪兽”Ampere 搞大事?

2015 年,在英特尔就职 28 年的总裁 Renee James 辞职,正在大众纷纷猜测她将如何开启下一段旅程时,她有了创业的想法,2017 年带领新团队创立了专注于为云和边缘打造微处理器的 Ampere 公司。 在云原生浪潮下,底层硬件需…

2020亚太内容分发大会 阿里云荣获“边缘计算领航企业”奖

10月21日,第八届亚太内容分发大会在北京隆重召开。凭借在边缘计算领域的先发优势、技术实力与丰富实践,阿里云荣获“边缘计算领航企业”称号。 伴随着中国5G商用进程提速,大带宽、大连接、低时延的应用场景爆发,将催生产业变革&a…

最佳途径 | 容器规模化落地如何四步走?

随着云原生时代的发展,传统 IT 基础设施加速云化,云原生化成为云上的必然趋势。作为云原生代表技术之一,容器技术可帮助企业提升 IT 架构的敏捷性,加速应用创新,帮助企业更加灵活地应对商业发展中的不确定性。疫情期间…

elasticsearch 嵌入式_Elasticsearch 开箱指南

内容概要ES 基础介绍,重点是其中的核心概念。基础 API 实践操作。1. 基础介绍Elasticsearch (ES) 是一个数据库,提供了分布式的、准实时搜索和分析。基于 Apache Lucene,可以操作结构化数据、非结构化数据、数字类型数据、地理空间数据。数据…

最良心的 chrome 插件可以良心到什么程度?

CSDN下起了红包雨399 元智能音箱199 元天猫精灵300元现金红包/会员100元红包/会员更有千万流量曝光100%有奖......作为日常总发现 " 宝藏 " 的你总体验过一些 " 王炸 " 级别的chrome插件让你想 “ 真诚 ” 安利所以,CSDN开启了彩虹屁chrome插件…

一文教会你如何写复杂业务代码

简介: 这两天在看零售通商品域的代码。面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题。针对该命题,我进行了比较细致的思考和研究。结合实际的业务场景,我沉淀了一套“如何写复杂业务代码”…

Day.js 常用方法

文章目录1. 初始化日期 / 时间2. 格式化日期 / 时间3. 加 / 减4. 获取某年某月的第一天或最后一天5. 获取星期几6. 获取毫秒数7. 获取时间差(默认输出的差值单位是毫秒)8. 获取时、分、秒9. 将毫秒转为时分秒10. 判断一个日期是否在另外一个日期之后 isA…

如何使用云原生数据湖,助力线上教育行业逐步智能化

简介: 阿里云基于对象存储OSS构建的数据湖解决方案,帮助企业有效消除数据孤岛的现象,让数据的价值真正被利用起来。 行业综述 线下教育行业因疫情受挫,线上教育却逆势增长 随着90年代互联网的引入,在线教育产品也依托…

caas k8s主控节点如何查询_k8s--04 部署harbor作为k8s镜像仓库

k8s实战部署harbor作为k8s镜像仓库1.实验目标部署k8s私有镜像仓库harbor把demo小项目需要的镜像上传到harbor上修改demo项目的资源配置清单,镜像地址修改为harbord的地址2.再node1上安装harbor[rootnode1 ~]# cd /opt/#上传harbor软件包[rootnode1 /opt]# rz -Erz w…

vue3中使用cookie

前端使用cookie 步骤一 编写方法cookie.ts //获取cookie、 const CooieTool {getCookie: (name: string) > {var arr, reg new RegExp("(^| )" name "([^;]*)(;|$)");if (arr document.cookie.match(reg))return (arr[2]);elsereturn null;},//设…

无人机、IoT 都危险?第五代网络威胁有哪些特点

从无序中寻找踪迹,从眼前事探索未来。2021 年正值黄金十年新开端,CSDN 以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,推出年度重磅企划栏目——「拟合」,通过对话企业技术高管大咖,跟踪报…

持续定义SaaS模式云数据仓库+Serverless

导读:今天主要和大家交流的是网易在数据湖 Iceberg 的一些思考与实践。从网易在数据仓库建设中遇到的痛点出发,介绍对数据湖 Iceberg 的探索以及实践之路。 主要内容包括: 数据仓库平台建设的痛点数据湖 Iceberg 的核心原理数据湖 Iceberg 社…

循序渐进db2 第3版_「图书推荐」焊接工程师手册第3版

机械工业出版社陈祝年 陈茂爱 著内容介绍《焊接工程师手册》(第3版)是焊接专业的综合性工具书,基本涵盖了焊接专业的技术内容。本版在保留第2版精华和特色的基础上添加了先进的工艺技术内容。全书共9篇58章。第1篇汇集了焊接工程师最常用而又不易记忆的符号、公式和…

阿里云推出业内首个云原生企业级数据湖解决方案:将在今年双11大规模应用

简介: 数据湖高峰论坛在京召开,阿里云宣布推出业内首个云原生企业级数据湖解决方案,提供EB级数据存储、分析能力,可一站式实现湖存储、湖加速、湖管理、湖计算,帮助企业对数据深入挖掘与分析,洞察其中蕴含的…

Serverless对研发效能的变革和创新

对企业而言,Serverless 架构有着巨大的应用潜力。随着云产品的完善,产品的集成和被集成能力的加强,软件交付流程自动化能力的提高,我们相信在 Serverless 架构下,企业的敏捷性有 10 倍提升的潜力。本次分享我主要分为以…