StarRocks实战——携程酒店实时数仓

目录

一、实时数仓

二、实时数仓架构介绍

2.1 Lambda架构

2.2 Kappa架构

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

3.1 架构选型

3.2 实时计算引擎选型

3.3 OLAP选型

四、携程酒店实时订单

4.1 数据源

4.2 ETL数据处理

4.3 应用效果

4.4 总结

  原文大佬的这篇实时数仓建设案例有借鉴意义,属于数据治理范畴,这里直接摘抄下来用作学习和知识沉淀。

一、实时数仓

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

二、实时数仓架构介绍

2.1 Lambda架构

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

2.2 Kappa架构

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

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

3.1 架构选型

  采用的是Lambda+OLAP 变体架构。Lambda架构具有灵活性高、容错性高、成熟度高和迁移成本低的优点,但是实时数据和离线数据需要分别使用两套代码。

   OLAP变体架构:将实时计算中的聚合计算由OLAP引擎承担,从而减轻实时计算部分的聚合处理压力。这样做的优点是既可以满足数据分析师的实时自助分析需求,并且可以减轻计算引擎的处理压力,同时也减少了相应的开发和维护成本。缺点是对OLAP 引擎的数据写入性能和计算性能有更高的要求。

  3.2 实时计算引擎选型

     Flink具备Exactly-once的语义,轻量级checkpoint容错机制、低延迟、高吞吐和易用性高的特点。SparkStreaming 更适合微批处理。我们选择了使用 Flink。

3.3 OLAP选型

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

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

四、携程酒店实时订单

4.1 数据源

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

4.2 ETL数据处理

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

    Muisev平台保证了Binlog消息的有序性,这里需要讨论的是ETL过程中如何保证消息的有序性。例如:一个酒店订单先在同一张表触发了两次更新操作,共计有了两条 Binlog 消息,消息1和消息2会先后进入流处理系统,如果这两个消息是在不同的Flink Task上进行处理,那么就有可能由于两个并发处理的速度不一致,先发生的消息后处理,导致最终输出的结果不对(出现乱序)

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

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

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

   上图中生成订单宽表的sql逻辑在离线批处理场景下没有问题,但是实时场景下,这个sql会按照双流join的方式依次处理,每次只能处理一个join,所以上面代码有9个 Join 节点,Join节点会将左流的数据和右流的数据全部保存下来,最终会导致join过程中state状态存储膨胀了9倍。

   因此,我们采用了union all + group by的方式替代join;先用union all把数据错位拼接到一起,然后再最外层进行group by。这种方式相当于将 Join 关联转换成group by,不会放大 Flink的状态存储。

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

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

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

  整体流程见下图:

4.3 应用效果

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

4.4 总结

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

参考文章:

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

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

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

相关文章

nebula容器方式安装:docker 安装nebula到windows

感谢阅读 基础环境安装安装docker下载nebula 安装数据库命令行安装查询network nebula-docker-compose_nebula-net并初始化查询安装初始使用root(God用户类似LINUX的root) 关闭服务 安装UI 基础环境安装 安装docker 点我下载docker 下载nebula 数据…

Sentinel实战(待完善)

目录 服务雪崩 什么是服务雪崩 服务不可用原因 解决方案 技术选型对比 Sentinel 介绍 优点 核心概念 资源 规则 代码实战 API实现 SentinelResource注解实现 Sentinel控制台 启动控制台服务 java应用接入控制台 微服务接入Sentinel 服务雪崩 什么是服务雪崩…

1、docker入门

文章目录 1、tocker简介2、tocker的安装&环境配置2、配置阿里云镜像3、基本命令1、镜像命令2、docker基本命令3、镜像基本命令4、Docker 容器常用命令 1、tocker简介 新一代的虚拟化技术 2、tocker的安装&环境配置 uname -r1、首先查看liunx的内核 yum update -y2、更…

uniapp npx update-browserslist-db@lates 问题解决

在uniapp运行项目时,会有这种报错,其实这是表明browserslistlatest版本低了,在催你升级版本,browserslistlatest是用来支持解析css用的,当然,你也可以直接忽略这个报错提示,也可以正常运行项目。…

【AIGC】OpenAI推出王炸级模型sora,颠覆AI视频行业(2024)

对于OpenAI推出的Sora模型,我们可以进一步探讨其可能的技术细节、潜在应用以及对AI视频行业的影响。 点击以下任一云产品链接,跳转后登录,自动享有所有云产品优惠权益: 经过笔者亲测,强烈推荐腾讯云轻量应用服务器作…

day05_用户管理minIO角色分配(页面制作,查询用户,添加用户,修改用户,删除用户,用户头像,查询所有角色,保存角色数据)

文章目录 1 用户管理1.1 页面制作1.2 查询用户1.2.1 需求说明1.2.2 后端接口需求分析SysUserSysUserDtoSysUserControllerSysUserServiceSysUserMapperSysUserMapper.xml 1.2.3 前端对接实现思路sysUser.jssysRole.vue 1.3 添加用户1.3.1 需求说明1.3.2 页面制作1.3.3 后端接口…

ky10-server docker 离线安装包、离线安装

离线安装脚本 # ---------------离线安装docker------------------- rpm -Uvh --force --nodeps *.rpm# 修改docker拉取源为国内 rm -rf /etc/docker mkdir -p /etc/docker touch /etc/docker/daemon.json cat >/etc/docker/daemon.json<<EOF{"registry-mirro…

力扣hot100题解(python版48-50题)

48、路径总和III 给定一个二叉树的根节点 root &#xff0c;和一个整数 targetSum &#xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xff0c;也不需要在叶子节点结束&#xff0c;但是路径方向必须是向下的&#xff08;只能从…

力扣hot100题解(python版41-43题)

41、二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例…

Unity将4个纹理图拼接成1个纹理

需要的效果 最终实现的效果大概如下: 4个贴图上去 这里随便放一个切分的图。 Shader代码如下 直接上代码: // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)// Unlit shader. Simplest possible textured shad…

DFA还原白盒AES密钥

本期内容是关于某app模拟登录的,涉及的知识点比较多,有unidbg补环境及辅助还原算法,ida中的md5以及白盒aes,fart脱壳,frida反调试 本章所有样本及资料均上传到了123云盘 llb资料官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 目录 首先抓包 fart脱壳 加密位置定位…

JavaWeb--JDBC

一&#xff1a;JDBC概述 1.概念 JDBC 就是使用Java语言操作关系型数据库的一套API 全称&#xff1a;( Java DataBase Connectivity ) Java 数据库连接 2.本质 官方&#xff08; sun 公司&#xff09;定义的一套操作所有关系型数据库的规则&#xff0c;即接口&#xff1b;各个…

【C语言】熟悉文件基础知识

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 文件 为了数据持久化保存&#xff0c;使用文件&#xff0c;否则数据存储在内存中&#xff0c;程序退出&#xff0c;内存回收&#xff0c;数据就会丢失。 程序设计中&…

代码随想录算法训练营第46天| 139.单词拆分、背包问题总结

139.单词拆分 完成 思路&#xff1a; 本题可以用背包问题的思路解决&#xff0c;单词是物品&#xff0c;字符串是背包&#xff0c;要求物品能否把背包装满。 dp[j] 字符串长度为j时&#xff0c;能否拆分为一个或多个在字典中出现的单词。 递推公式为&#xff1a;if([i, j] 这个…

“平民化”非结构数据处理

在全球信息产业高速发展的背景下&#xff0c;IDC预测&#xff0c;2018 到 2025 年之间&#xff0c;全球产生的数据量将会从 33 ZB 增长到 175 ZB&#xff0c; 复合增长率27%&#xff0c;其中超过 80%的数据都会是处理难度较大的非结构化数据&#xff0c;如文档、文本、图形、图…

备战蓝桥杯---状态压缩DP基础1之棋盘问题

它只是一种手段&#xff0c;一种直观而高效地表示复杂状态的手段。 我们先来看一道比较基础的&#xff1a; 直接DFS是肯定不行&#xff0c;我们发现对某一行&#xff0c;只要它前面放的位置都一样&#xff0c;那么后面的结果也一样。 因此我们考虑用DP&#xff0c;并且只有0/…

WEB服务器-Tomcat(黑马学习笔记)

简介 服务器概述 服务器硬件 ● 指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算机大很多。 服务器&#xff0c;也称伺服器。是提供计算服务的设备。由于服务器需要响应服务请求&#xff0c;并进行处理&#xff0c;因此一般来说服务器应具备承担服务并且保障…

flutter简单的MethodChannel通道Demo(引入调用小红书sdk)

flutter端创建MethodChannel类 import package:flutter/services.dart;//MethodChannel const methodChannel const MethodChannel(com.flutter.demo.MethodChannel);class FlutterMethodChannel {/** MethodChannel flutter给原生发信息* 在方法通道上调用方法invokeMethod*…

用冒泡排序模拟C语言中的内置快排函数qsort!

目录 ​编辑 1.回调函数的介绍 2. 回调函数实现转移表 3. 冒泡排序的实现 4. qsort的介绍和使用 5. qsort的模拟实现 6. 完结散花 悟已往之不谏&#xff0c;知来者犹可追 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们有帮助的话&#xff0c;别忘了给个免…

《TCP/IP详解 卷一》第9章 广播和组播

目录 9.1 引言 9.2 广播 9.2.1 使用广播地址 9.2.2 发送广播数据报 9.3 组播 9.3.1 将组播IP地址转换为组播MAC地址 9.3.2 例子 9.3.3 发送组播数据报 9.3.4 接收组播数据报 9.3.5 主机地址过滤 9.4 IGMP协议和MLD协议 9.4.1 组成员的IGMP和MLD处理 9.4.2 组播路由…