Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >干货 | 携程酒店实时数仓架构和案例

干货 | 携程酒店实时数仓架构和案例

作者头像
携程技术
发布于 2023-02-28 01:43:45
发布于 2023-02-28 01:43:45
1.4K0
举报
文章被收录于专栏:携程技术携程技术

作者简介

秋石,携程数据仓库专家,关注大数据、数据仓库、数据治理等领域;

九号,携程数据技术专家,关注数据仓库架构、数据湖、数据治理;

魁伟,携程资深数据工程师,关注实时&离线大数据产品及技术。

一、实时数仓

当前,企业对于数据实时性的需求越来越迫切,因此需要实时数仓来满足这些需求。传统的离线数仓的数据时效性通常为 T+1,并且调度频率以天为单位,无法支持实时场景的数据需求。即使将调度频率设置为每小时,也仅能解决部分时效性要求较低的场景,对于时效性要求较高的场景仍然无法优雅地支撑。因此,实时数据使用的问题必须得到有效解决。实时数仓主要用于解决传统数仓数据时效性较低的问题,通常会用于实时的 OLAP 分析、实时数据看板、业务指标实时监控等场景。

二、实时数仓架构介绍

2.1 Lambda架构

Lambda 架构将数据分为实时数据和离线数据,并分别使用流式计算引擎(例如 Storm、Flink 或者 SparkStreaming)和批量计算引擎(例如 HiveSpark)对数据进行计算。然后,将计算结果存储在不同的存储引擎上,并对外提供数据服务。

2.2 Kappa架构

Kappa 架构将所有数据源的数据转换为流式数据,并将计算统一到流式计算引擎上。相比 Lambda 架构,Kappa 架构省去了离线数据流程,使得流程变得更加简单。Kappa 架构之所以流行,主要是因为 Kafka 不仅可以作为消息队列使用,还可以保存更长时间的历史数据,以替代 Lambda 架构中的批处理层数据仓库。流处理引擎以更早的时间作为起点开始消费,起到了批处理的作用。

三、携程酒店实时数仓架构

3.1 方案选型

(1)架构选型:Lambda+OLAP 变体架构。Lambda 架构具有灵活性高、容错性高、成熟度高和迁移成本低的优点,但是实时数据和离线数据需要分别使用两套代码。OLAP 变体架构将实时计算中的聚合计算由 OLAP 引擎承担,从而减轻实时计算部分的聚合处理压力。这样做的优点是既可以满足数据分析师的实时自助分析需求,并且可以减轻计算引擎的处理压力,同时也减少了相应的开发和维护成本。缺点是对OLAP 引擎的数据写入性能和计算性能有更高的要求。

(2)实时计算引擎选型: Flink 具有 Exactly-once 的准确性、轻量级 Checkpoint 容错机制、低延时高吞吐和易用性高的特点。SparkStreaming 更适合微批处理。我们选择了使用 Flink。

(3)OLAP选型: 我们选择 StarRocks 作为 OLAP 计算引擎。主要原因有3个:

  • StarRocks 是一种使用MPP分布式执行框架的数据库,集群查询性能强大。
  • StarRocks 在高并发查询和多表关联等复杂多维分析场景中表现出色,并发能力强于 Clickhouse,而携程酒店的业务场景需要 OLAP 数据库支持每小时几万次的查询量。
  • 携程酒店的业务场景众多,StarRocks 提供了4种存储模型,可以更好的应对各种业务场景。

四、实际案例—携程酒店实时订单

4.1 数据源

Mysql Binlog,通过携程自研平台 Muise 接入生成 Kafka。

4.2 ETL数据处理

问题一: 如何保证消息处理的有序性?

Muise 保证了 Binlog 消息的有序性,我们这要讨论的是 ETL 过程中如何保证消息的有序性。举个例子,比如说一个酒店订单先在同一张表触发了两次更新操作,共计有了两条 Binlog 消息,消息1和消息2会先后进入流处理里面,如果这两个消息是在不同的 Flink Task 上进行处理,那么就有可能由于两个并发处理的速度不一致,导致先发生的消息处理较慢,后发生的消息反而先处理完成,导致最终输出的结果不对。

上图是一个简化的过程,业务库流入到 Kafka,Binlog 日志是顺序写入的,根据主键进行 Hash 分区,写到 Kafka 里面,保证同一个主键的数据写入 Kafka 同一个分区存。Flink 消费 Kafka 时,需要设置合理的并发,保证一个分区的数据由一个 Task 负责,另外尽量采用逻辑主键来作为 Shuffle Key,从而保证 Flink 内部的有序性。最后在写入 StarRocks 的时候,要按照主键进行更新或删除操作,这样就能保证端到端的一致性。

问题二:如何生产实时订单宽表?

为了方便分析师和数据应用使用,我们需要生成明细订单宽表并存储在 StarRocks 上。酒店订单涉及业务过程相对复杂,数据源来自于多个数据流中。且由于酒店订单变化生命周期较长,客人可能会提前几个月甚至更久预订下单。这些都给生产实时订单宽表带来一定的困难。

上图中生成订单宽表的 SQL 在离线批处理的时候通常没有问题,但在实时处理的情景下就很难行的通。因为在实时处理时,这个 SQL 会按照双流 Join 的方式依次处理,每次只能处理一个 Join,所以上面代码有9个 Join 节点,Join 节点会将左流的数据和右流的数据全部保存下来,这样就会导致我们这个 Join 的过程需要存储的数据规模放大9倍。

我们采用了 Union all+Group by 的方式替代 Join;就是用 Union All 的方式,把数据错位拼接到一起,后面加一层 Group By,相当于将 Join 关联转换成 Group By,这样不会放大 Flink 的状态存储,而且在增加新的流时,相比 Join,状态存储的增加也可以忽略不计,新增数据源的成本近乎为0。

还有一个问题,上面有介绍过酒店订单的生命周期很长,用 union all 的方式,状态周期只保存了30分钟, 一些订单的状态可能已经过期,当出现订单状态时,我们需要获取订单的历史状态,这样就需要一个中间层保存历史状态数据来做补充。历史数据我们选择存放在 Redis 中,第一次选择从离线数据导入,实时更新数据同时更新 Redis 和 StarRocks。

问题三:如何做数据校验?

实时数据存在数据丢失或逻辑变更未及时的风险,为了保证数据的准确性,每日凌晨用数据更新时间在 T-1 和离线数据做比对,如果数据校验不一致,会用离线数据更新 StarRocks 中这部分数据,并排查原因。

整体流程见下图:

4.3 携程酒店实时订单表的应用效果

酒店实时订单表的数据量为十亿级,维表数据量有几百万,现已经在几十个数据看板和监控报表中使用,数据报表通常有二三十个维度和十几个数据指标,查询耗时99%约为3秒。

4.4 总结

酒店实时数据具有量级大,生命周期长,业务流程多等复杂数据特征,携程酒店实时数仓选用 Lambda+OLAP 变体架构,再借助 Starrocks 强大的计算性能,不仅降低了实时数仓开发成本,同时达到了支持实时的多维度数据统计、分析、监控的效果,在实时库存监控以及应对紧急突发事件等项目获得了良好效果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 携程技术中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
实时数仓和离线数仓还分不清楚?看完就懂了
实时数仓?离线数仓?是不是经常听到这两个词,却总有点分不清它们到底有啥不一样?别担心,这几乎是每个数据新手都会遇到的困惑。简单来说,它们最核心的区别就在于“快慢”和“怎么处理数据”。 这篇文章就用最直白的语言,带你快速搞懂两者的定义、特点、常用技术和应用场景,三分钟让你心里明明白白!
帆软BI
2025/08/18
4010
数据仓库架构全解析:从经典分层到Lambda与Kappa,离线与实时数仓的深度对比
在数字经济蓬勃发展的2025年,数据已成为驱动社会创新的核心引擎。根据最新发布的《国家数据要素市场化配置改革方案》,数据要素作为关键生产要素,正在重塑产业生态和商业模式。以医疗行业为例,某三甲医院通过整合患者诊疗数据、基因数据和生活方式数据,将原始医疗记录转化为个性化治疗方案,使慢性病管理效率提升40%。理解数据的本质及其价值转化机制,是构建智能数据仓库的首要前提。
用户6320865
2025/11/29
1620
数据仓库架构全解析:从经典分层到Lambda与Kappa,离线与实时数仓的深度对比
看完了这篇实时数仓建设,才发现以前的都白看了
在瞬息万变的商业环境中,等一天才能看到分析结果?这已经过时了。实时数仓(Real-time Data Warehouse)让数据从产生到洞察几乎“零延迟”,彻底告别“T+1”的等待。
帆软BI
2025/08/27
3230
实时数仓:实时数仓3.0的演进之路
传统意义上我们通常将数据处理分为离线数据处理和实时数据处理。对于实时处理场景,我们一般又可以分为两类,一类诸如监控报警类、大屏展示类场景要求秒级甚至毫秒级;另一类诸如大部分实时报表的需求通常没有非常高的时效性要求,一般分钟级别,比如10分钟甚至30分钟以内都可以接受。
Freedom123
2024/03/29
9520
实时数仓:实时数仓3.0的演进之路
20000字详解大厂实时数仓建设(好文收藏)
目前各大公司的产品需求和内部决策对于数据实时性的要求越来越迫切,需要实时数仓的能力来赋能。传统离线数仓的数据时效性是 T+1,调度频率以天为单位,无法支撑实时场景的数据需求。即使能将调度频率设置成小时,也只能解决部分时效性要求不高的场景,对于实效性要求很高的场景还是无法优雅的支撑。因此实时使用数据的问题必须得到有效解决。
五分钟学大数据
2022/02/12
5.6K0
20000字详解大厂实时数仓建设(好文收藏)
农业银行湖仓一体实时数仓建设探索实践
在数字化转型驱动下,实时化需求日益成为金融业数据应用新常态。传统离线数仓“T+N”数据供给模式,难于满足“T+0”等高时效场景需求;依托Storm、Spark Streaming、Flink等实时计算框架提供“端到端”的实时加工模式,无法沉淀实时数据资产,存在实时数据复用性低、烟囱式垂直建设等不足。
ApacheHudi
2023/11/06
2.2K0
农业银行湖仓一体实时数仓建设探索实践
基于Flink构建全场景实时数仓
虽然实时计算在最近几年才火起来,但是在早期也有不少公司有实时计算的需求,但数据量不成规模,所以在实时方面形成不了完整的体系,基本所有的开发都是具体问题具体分析,来一个需求做一个,基本不考虑它们之间的关系,开发形式如下:
五分钟学大数据
2021/07/29
1.6K0
湖仓一体电商项目(一):项目背景和架构介绍
湖仓一体实时电商项目是基于某宝商城电商项目的电商数据分析平台,本项目在技术方面涉及大数据技术组件搭建,湖仓一体分层数仓设计、实时到离线数据指标分析及数据大屏可视化,项目所用到的技术组件都从基础搭建开始,目的在于湖仓一体架构中数据仓库与数据湖融合打通,实现企业级项目离线与实时数据指标分析。在业务方面目前暂时涉及到会员主题与商品主题,分析指标有用户实时登录信息分析、实时浏览pv/uv分析、实时商品浏览信息分析、用户积分指标分析,后续还会继续增加业务指标和完善架构设计。
Lansonli
2022/07/30
1.5K0
湖仓一体电商项目(一):项目背景和架构介绍
美团外卖实时数仓建设实践
导读:本文主要介绍一种通用的实时数仓构建的方法与实践。实时数仓以端到端低延迟、SQL标准化、快速响应变化、数据统一为目标。在实践中,我们总结的最佳实践是:一个通用的实时生产平台 + 一个通用交互式实时分析引擎相互配合同时满足实时和准实时业务场景。两者合理分工,互相补充,形成易于开发、易于维护、效率最高的流水线,兼顾开发效率与生产成本,以较好的投入产出比满足业务多样需求。
Lenis
2020/11/10
8260
美团外卖实时数仓建设实践
TiDB 在携程 | 实时标签处理平台优化实践
在国际业务上,由于面临的市场多,产品和业务复杂多样,投放渠道多,引流费用高,因此需要对业务和产品做出更精细化的管理和优化,满足市场投放和运营需要,降低整体成本,提高运营效率与转化率。为此,携程专门研发了国际业务动态实时标签化处理平台(以下简称 CDP )。
PingCAP
2022/03/30
6280
实时数仓架构的演进与对比
1991年,比尔·恩门(Bill Inmon)出版了他的第一本关于数据仓库的书《Building the Data Warehouse》,标志着数据仓库概念的确立。
大数据学习与分享
2023/02/26
1.3K0
实时数仓架构的演进与对比
【流计算 Oceanus】巧用 Flink 实现高性能 ClickHouse 实时数仓
Apache Flink 是流式计算处理领域的领跑者。它凭借易用、高吞吐、低延迟、丰富的算子和原生状态支持等优势,多方位领先同领域的开源竞品。
KyleMeow
2021/11/25
5.5K3
美团外卖实时数仓方案整理
实时数仓以端到端低延迟、SQL标准化、快速响应变化、数据统一为目标。美团外卖数据智能组总结的最佳实践是:一个通用的实时生产平台跟一个通用交互式实时分析引擎相互配合,同时满足实时和准实时业务场景。两者合理分工,互相补充,形成易开发、易维护且效率高的流水线,兼顾开发效率与生产成本,以较好的投入产出比满足业务的多样性需求。
大数据流动
2022/05/10
9160
美团外卖实时数仓方案整理
数据湖|Flink + Iceberg 全场景实时数仓的建设实践
摘要:Apache Flink 是目前大数据领域非常流行的流批统一的计算引擎,数据湖是顺应云时代发展潮流的新型技术架构,以 Iceberg、Hudi、Delta 为代表的解决方案应运而生,Iceberg 目前支持 Flink 通过 DataStream API /Table API 将数据写入 Iceberg 的表,并提供对 Apache Flink 1.11.x 的集成支持。
大数据技术架构
2021/08/25
5.1K0
数据湖|Flink + Iceberg  全场景实时数仓的建设实践
数据仓库介绍与实时数仓案例
数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。
王知无-import_bigdata
2019/07/23
3.1K0
数据仓库介绍与实时数仓案例
浅谈一下实时数据仓库
实时数据仓库,简称实时数仓,是一种用于集成、存储和分析大规模结构化数据与非结构化数据的数据管理系统,强调数据的易用性、可分析性和可管理性。它主要面向实时数据流,能够实时地接收、处理和存储数据,并提供实时的数据分析结果。
闫同学
2023/12/05
1.9K0
大数据开发:离线数仓与实时数仓
进入大数据时代,大数据存储的解决方案,往往涉及到数据仓库的选型策略。从传统时期的数据仓库,到大数据环境下的数据仓库,其核心的技术架构是在随着最新技术趋势而变化的。今天的大数据开发学习分享,我们就来讲讲,大数据环境下的数据仓库。
成都加米谷大数据
2021/06/09
5.1K0
大数据开发:离线数仓与实时数仓
实时数仓方案五花八门,实际落地如何选型和构建!
著有:《图解 Spark 大数据快速分析实战》;《offer 来了:Java 面试核心知识点精讲(原理篇)》;《offer 来了:Java 面试核心知识点精讲(架构篇)》。
小晨说数据
2022/11/18
4.9K0
实时数仓方案五花八门,实际落地如何选型和构建!
干货|流批一体Hudi近实时数仓实践
传统意义上的数据集市主要处理T+1的数据。随着互联网的发展,当前越来越多的业务场景对于数据时效性提出了更高的要求,以便及时快速地进行数据分析和业务决策,比如依托实时数据情况开展实时推荐、实时风控、实时营销等。特别是各种新技术的出现、发展和日趋成熟,实时数据分析和处理也成为可能。实时的大规模数据处理成为企业数字化转型过程中需要破解的难题,也是企业当前面临的一个普遍需求。
大数据老哥
2021/08/25
7.3K0
干货|流批一体Hudi近实时数仓实践
当 TiDB 与 Flink 相结合:高效、易用的实时数仓
随着互联网飞速发展,企业业务种类会越来越多,业务数据量会越来越大,当发展到一定规模时,传统的数据存储结构逐渐无法满足企业需求,实时数据仓库就变成了一个必要的基础服务。以维表 Join 为例,数据在业务数据源中以范式表的形式存储,在分析时需要做大量的 Join 操作,降低性能。如果在数据清洗导入过程中就能流式的完成 Join,那么分析时就无需再次 Join,从而提升查询性能。
PingCAP
2020/10/27
1.8K0
推荐阅读
相关推荐
实时数仓和离线数仓还分不清楚?看完就懂了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场