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

数仓基础(九):各大公司实时数仓实践 以上体系架构图就是滴滴整体业务架构图,底层是数据源,中间也做了数据仓库分层,包括ODS层,DWD明细层是将ODS层数据库binlog、Public Log、Topic、消息队列同步过来,DWD包含三类数据:业务数据(订单交易),流量数据(主要是埋点获取用户行为数据,用作用户分析),维度数据(用户数据、司机数据、车辆行驶数据、拍照数据等维度数据),DWM层就是指标汇总层,对一些核心的指标做一些汇总,包括:冒泡、呼单、完单、PV、UV、财务、安全等。数据写入Redis和ES的主要作用是做实时数据缓存。 阅读详情

作者简介

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

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

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

一、实时数仓

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

d2e942a6e8df6ac6247c378fddc2f806.png

二、实时数仓架构介绍

2.1 Lambda架构

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

4c32731e83a52f22cee2e9cea8d1d458.png

2.2 Kappa架构

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

5ff03c118a54e9db78534d554d855088.jpeg

bf266517ca8dd5c9d5a46fe095252e87.jpeg

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

f1491be74c597e78e6fddd4bf97ae3f5.png

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 上进行处理,那么就有可能由于两个并发处理的速度不一致,导致先发生的消息处理较慢,后发生的消息反而先处理完成,导致最终输出的结果不对。

52010807fc7d442fea4683d519bf1e61.png

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

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

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

3df76675ddebc8cc65226bb83767b464.png

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

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

aa66e82a11512744db2340422a0850d7.png

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

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

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

整体流程见下图:

84f397f410aec521409cf8a28f9dc35d.png

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

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

4.4 总结

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

【推荐阅读】

0ddf088bd2fbddf70598f8c208133741.jpeg

 “携程技术”公众号

  分享,交流,成长

用FSL的eddy_topup pipeline完整处理DTI数据:从原理到实战,搞定涡流和磁化率畸变 本文详细介绍了如何使用FSL的eddy_topup pipeline完整处理DTI数据,解决涡流和磁化率畸变问题。从原理到实战,涵盖了数据格式转换、脑提取、b0图像处理等关键步骤,并提供了acqparams.txt配置和eddy命令的详细解析,帮助研究人员高效完成DTI数据校正。 阅读详情

相关推荐

Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵)

Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵)算法背景介绍Hessian 矩阵与泰勒多项式关于求t导数与中心点、亚像素点高斯函数作用文献 算法背景介绍 在线结构光视觉传感器中,由线激光器发射出的线结构光,在本质上为一个连续且具有一定厚度的空间光平面,而在目标表面上所形成的具有一定宽度的光条特征,即为该光平面与目标表面相交而成的交线。在该空间光平面的厚度方向上,光强近似服从高斯分布,因而在摄像机采集到的光条图像中,在沿着光条宽度的方向或光条的法线方向上,其灰度也会呈现出类似

jiangxing11的博客 1万+

用Flink取代Spark Streaming,知乎实时数仓架构演进

“数据智能” (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务。从智能商业的角度来讲,数据的结果代表了用户的反馈,获取结果的及时性就显得尤为重要,快速的获取数据反馈能够帮助公司更快的做出决策,更好的进行产品迭代,实时数仓在这一过程中起到了不可替代的作用。本文主要讲述知乎的实时数仓实践以及架构的演进...

测试 3851

青龙人形机器人硬件平台设计全解析:从构型到控制系统的实战指南

本文深度解析了青龙人形机器人硬件平台的设计全流程,从需求分析、构型设计到核心系统实现。文章详细阐述了其43个自由度的仿生构型、高动态性下肢设计、灵巧作业系统以及分布式控制架构,并探讨了旋转关节与直线关节等关键技术选型,为开发者提供了从理论到实践的完整硬件设计指南。

weixin_29248313的博客 380

干货 | Islands Architecture(孤岛架构)在携程新版首页的实践

作者简介携程前端框架团队,为携程集团各业务线在PC、H5、小程序等各阶段提供优秀的Web解决方案。当前主要专注方向包括:新一代研发模式探索,Rust构建工具链路升级、Serverless应用框架开发、在线文档系统开发、低代码平台搭建、适老化与无障碍探索等。一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过...

携程技术 3935

AI 算力基础设施深度系列(一):从容器到 Kubernetes——算力底座的诞生

1. 容器 = Namespace(视图隔离) + Cgroup(资源限制) + Union FS(镜像分层)└── 不是虚拟机!共享内核,接近零开销2. K8S 三大设计哲学:└── 声明式 API + 控制循环 + 可扩展架构3. K8S 架构:└── 控制面 (API Server / etcd / Scheduler / Controller Manager)

warm3snow的博客 534

Verilog中用于时序验证的系统任务[setup][hold][skew][width][recovery][removal]【STA静态时序分析】

下列时序检查语句错误的是() A. $setup(posedge clk, data, tSU) B. $hold(posedge clk, data, tHLD) C. $setuphold(posedge clk, data, tSU, tHLD) 答案:A 解析: 在时序检查函数中,$setup 函数比较特殊,格式是: $setup(data_event, reference_event, limit); 其他常见的检查是: $......(reference_...

DengFengLai123的博客 1万+

干货 | 携程风控数据仓库实践

作者简介K.Y.Xing,携程高级开发经理,对高并发数据处理,流式数据处理,风控大数据处理,用户行为分析有浓厚兴趣。一、引言携程风控包括了酒店,机票,度假,火车票等所有携程产线的支付风...

携程技术 4438

基于Matlab的深度学习OFDM系统信号检测

在接收端,我们首先去除循环前缀,然后对接收到的信号进行FFT变换和QAM解调。在通信系统中,正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)是一种常用的调制技术,它可以将高速数据流分成若干个低速子载波进行传输,提高了信道利用率和抗干扰性能。接下来,我们使用训练好的神经网络对QAM调制后的数据进行检测,得到估计的FFT变换结果。深度学习方法可以通过大量的训练数据来学习信号的特征,并具有一定的适应能力,在某些情况下可能能够获得更好的检测性能。

2301_79325657的博客 296

数据仓库之数仓分层及hive分层

目录。

张伟的专栏 1534

黑猫带你学UFS协议第12篇:UFS标志(Flags)和属性(Atrributes)详解

UFS中的标志其实就是一些开关,布尔型,非0即1,打开或者关闭。这些标志可以用来使能或者禁止UFS设备的一些功能、模式或者状态。 简单来说,flag和attribute、discriptor一样,都是ufs的寄存器罢了。只不过spec将这些寄存器分类了,分成这三种大的类型了而已。 标志可以被清除、复位、设置、触发、读。 主机也是通过设备管理器的Query Request UPIU来读取或者写标志。

黑猫奥利奥的博客 2082

飞书接入OpenClaw:从零到一的保姆级图文教程

本文主要介绍了飞书接入OpenClaw:从零到一的保姆级图文教程,希望能对学习使用OpenClaw 的同学们有所帮助。 文章目录 1. 背景 2. 解决方案 2.1 步骤一:安装插件 2.2 步骤二:创建机器人应用 2.3 步骤三:测试 3. 注意事项

weixin_43178406的博客 13万+

干货 | 准实时数仓落地实战:携程商旅基于Paimon的湖仓一体架构设计与批流融合实践

在我们内部实践中,基于Tag的增量计算替代全量ETL后,作业的处理速度提升了4~5倍,尤其在增量数据较少的ETL场景下,带来了显著收益。这不仅显著提升了计算效率,还增强了数据的可维护性和灵活性。在确保数据准确性的基础上,为提升数据新鲜度,我们设计了如图所示的实时与离线混合链路:订单票号等核心字段的加工使用Flink+Paimon准实时链路完成,最终的订单筛选则通过Spark批作业定时执行,产出的结果表通过携程内部DaaS服务注册为API,便于下游系统实时获取提醒订单,兼顾了数据的时效性与服务的稳定性。

携程技术 1308

使用PostgreSQL构建高可用数据库集群

在现代企业级应用中,数据库的高可用性已成为业务连续性的核心要求。PostgreSQL作为一款功能强大的开源关系型数据库,其高可用架构的设计直接影响着系统的稳定性和可靠性。

九天的专栏 1257

干货 | 性能提升400%,ClickHouse在携程酒店数仓的实践

作者简介小琴,携程高级数据经理,负责酒店BI、数仓工作,专注于大数据应用领域多年。一、背景随着时间推移和业务的快速发展,携程酒店数据累积越来越多。目前流量日数据在3T左右,再加上各种订...

携程技术 1606

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

clickhouse join_干货 | 性能提升400%,ClickHouse在携程酒店数仓的实践

作者简介小琴,携程高级数据经理,负责酒店BI、数仓工作,专注于大数据应用领域多年。一、背景随着时间推移和业务的快速发展,携程酒店数据累积越来越多。目前流量日数据在3T左右,再加上各种订单、价、量、态等数据更是庞大。现有Hive(Spark引擎)执行速度虽然相对较快,但在国际化发展背景下,一些海外业务由于时差问题,数据需要比国内提前数小时完成,性能提升迫在眉睫。2020年初,我们开始研究...

weixin_39550258的博客 2371

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

clickhouse join_干货 | ClickHouse在携程数仓实践

作者简介小琴,携程高级数据经理,负责酒店BI、数仓工作,专注于大数据应用领域多年。一、背景随着时间推移和业务的快速发展,携程酒店数据累积越来越多。目前流量日数据在3T左右,再加上各种订单、价、量、态等数据更是庞大。现有Hive(Spark引擎)执行速度虽然相对较快,但在国际化发展背景下,一些海外业务由于时差问题,数据需要比国内提前数小时完成,性能提升迫在眉睫。2020年初,我们开始研究...

weixin_39630410的博客 555

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ClickHouse 进阶之路(干货实战篇)

本篇主要是接触ClickHouse初期,用以学习的资料存放和传播,如有侵权,请联系本人,留言即可。 附上链接 【QQ音乐】QQ音乐PB级ClickHouse实时数据平台架构演进之路 https://zhuanlan.zhihu.com/p/145503455 【腾讯看点】腾讯看点基于 Flink 的实时数仓及多维实时数据分析实践 https://developer.aliyun.com/article/772472 【今日头条】最快开源OLAP引擎!ClickHouse在头条的技术演进 http:/.

weixin_38073361的博客 1952

揭开 ClickHouse 快的面纱

https://www.jianshu.com/p/f9a54193dc63 背景 其实早在去年我们就已经开始接触并研究clickhouse了,因为当时进行多表关联测试性能并不是特别优秀,所以并没有在线上大范围使用,当时研究的是分布式部署 (感觉分布式会比单机好一些)最后发现性能并不怎么样 而且分布式的sql也有很多限制,不支持单条删除和更新操作、不支持in和join(...

Focus on Lakehouse 2658

clickhouse hbase性能对比_揭开 ClickHouse 快的面纱

https://www.jianshu.com/p/f9a54193dc63背景其实早在去年我们就已经开始接触并研究clickhouse了,因为当时进行多表关联测试性能并不是特别优秀,所以并没有在线上大范围使用,当时研究的是分布式部署 (感觉分布式会比单机好一些)最后发现性能并不怎么样 而且分布式的sql也有很多限制,不支持单条删除和更新操作、不支持in和join(当时的版本,18.12...

weixin_39724266的博客 8230

腾讯、抖音、百度、B站、携程、小米、工行、平安集团如何在大数据架构、数据库管理、运维保障中落地AI技术?丨DAMS峰会...

在已然到来的数据智能时代,各技术领域的新一波挑战和创变成为了技术圈的新课题:在AI技术的发展和引入下,如何提升海量数据处理的高效性与实时性?如何解决数据识别、估值与变现难题,做好数据资产管理?如何保障数据库在高并发、强一致性下的安全可控?如何推进运维自动化与智能化以适应复杂多变的系统环境?为了和大家一起探索AI相关技术在大数据、数据资产管理、数据库、运维等领域的最佳落地方式,挖掘由此激发的软件发展...

bisal的专栏 186

基于大模型,大厂和金融龙头的新一代运维体系规划与建设丨DAMS峰会

在已然到来的数据智能时代,各技术领域的新一波挑战和创变成为了技术圈的新课题:在AI技术的发展和引入下,如何提升海量数据处理的高效性与实时性?如何解决数据识别、估值与变现难题,做好数据资产管理?如何保障数据库在高并发、强一致性下的安全可控?如何推进运维自动化与智能化以适应复杂多变的系统环境?为了和大家一起探索AI相关技术在大数据、数据资产管理、数据库、运维等领域的最佳落地方式,挖掘由此激发的软件发展...

铭毅天下Elasticsearch 897

AI技术在数据库性能异常诊断、智能运维、超融合设计中的应用与实践丨DAMS峰会...

在已然到来的数据智能时代,各技术领域的新一波挑战和创变成为了技术圈的新课题:在AI技术的发展和引入下,如何提升海量数据处理的高效性与实时性?如何解决数据识别、估值与变现难题,做好数据资产管理?如何保障数据库在高并发、强一致性下的安全可控?如何推进运维自动化与智能化以适应复杂多变的系统环境?为了和大家一起探索AI相关技术在大数据、数据资产管理、数据库、运维等领域的最佳落地方式,挖掘由此激发的软件发展...

weixin_40768973的博客 406

2023.4.4 携程数仓一面(15min左右)

一道是将竖表转为横表,一道是筛选成绩大于60,获得最高成绩,对应的人,课程,成绩。8.假设场景,如果某天流量突然变化幅度很大,怎么分析原因。9.开头的两道sql题怎么做,说思路,比较简单。5.采集数据过程遇到什么问题,怎么解决。1.上来先在腾讯会议发了两道sql题。4.项目数仓分层怎么建,项目建的5层。6.有没有遇到过数据倾斜,怎么解决。3.项目中的数据量有多大。7.有没有遇到过数据挤压。

cxfool的博客 387

数据仓库-酒店主题和业务分享

自己整理的Xmind仅供参考,笔者目前在一家酒店集团做数据开发,也是0-1建设,有兴趣的欢迎加我好友沟通。入住天数(根据房间类型不一样,实际间夜会有不同,如全天房间夜是1,钟点房/半天房是0.5,具体定义根据自身业务设定)本文针对酒店行业的特性,对酒店业务主题进行划分,列举酒店常用统计维度和指标供大家参考。客户:可以分为会员、散客(自行到店入住)、协议(与酒店长期合作,内部价)、中介。线上预定:可以分为直销(官网/小程序/app)和分销(渠道合作如携程/飞猪)ADR:平均房价=客房收入/实际售出客房数量。

DolphinF的博客 672

实时数仓详解

本文讨论了实时数仓(RTDW)的背景、定义、优势和挑战、架构、应用案例以及技术实现。实时数仓是一种现代化的数据仓库,具有大数据规模的小数据语义和性能。它可以处理实时数据、最新数据和历史数据,并且能够跨数据域进行相关性分析。实时数仓具有更快的数据到达和查询速度,可以在集成且安全的平台上完成所有功能。 实时数仓的优势包括更快的决策、数据民主化、个性化的客户体验、提高业务敏捷性和解锁新的业务用例。然而,实时数仓也面临着**ETL性能**和**复杂实时计算场景**等挑战。

Shockang的博客 4593

实时数据仓库建模:Kafka+Flink实战案例

需求分析:明确要解决的问题(实时销售额监控);数据建模:设计ODS、DWD、DWS三层模型,明确每层的作用;数据Pipeline实现用Python模拟订单数据,发送到Kafka的ODS层;用Flink SQL处理数据,完成DWD层清洗和DWS层聚合;将DWS层数据存储到ClickHouse,供可视化查询;可视化展示:用Grafana连接ClickHouse,创建实时 dashboard。

小程序开发 853
上一篇: 干货 | 携程IT数字办公平台iDesk的运营实践
下一篇: 干货 | 携程日志系统治理演进之路
携程技术
博客等级 码龄10年 3715粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值