干货 | 携程酒店基于血缘元数据的数据流程优化实践

一次实时数据链路丢数排查:从 MQTT 队列积压到 SQL 统计开销 本文通过一次实时数据链路压测,排查了从MQTT到ClickHouse的端到端数据丢失问题。核心方法是为每条消息添加序号,建立独立观察点(MQTT订阅端、Kafka消费者),结合转发服务阶段统计与线程栈分析,定位到下游处理速度不足源于Druid SQL合并统计的高开销。优化措施包括关闭SQL合并、扩容代理队列、增强生产侧失败处理,并验证15分钟内实现全链路对账一致,显著缓解积压与丢包。关键收获:数据可对账、明确各阶段“成功”定义、关注客户端队列状态。 阅读详情

作者简介

九号,携程数据技术专家,关注数据仓库架构、数据湖、流式计算、数据治理。

一、背景

元数据MetaData狭义的解释是用来描述数据的数据,广义的来看,除了业务逻辑直接读写处理的那些业务数据,所有其它用来维持整个系统运转所需的信息/数据都可以叫作元数据。比如数据表格的Schema信息,任务的血缘关系,用户和脚本/任务的权限映射关系信息等等。

在数据仓库的建设质量的评估中,一个必不可少的评价指标就是数据产出的及时性,特别是对于P0级别的流程,及时性指标的好坏一方面决定了下游应用方能否准时地获取所需的业务指标,直接影响到业务的工作效率;另一方面也反映了相应指标的数据架构的合理程度。

数据及时性,顾名思义就是测试数据需要按时产出。及时性重点关注的三个要素是:定时调度时间、数据任务优先级以及数据产出deadline。其中任务的优先级决定了它获取数据计算资源的多少,影响了任务执行时长。数据deadline则是数据最晚产出时间的统一标准,需要严格遵守。这三要素中,属于业内统一认知且在质量保障阶段需要重点关注的是:数据deadline,这也是我们优化数据流程产出的最终评判标准。

二、问题

上述部分已经阐述了数据及时性的重要性和评判标准,在通常情况下,为了提升数据及时性,需要投入人力对重点数据流程进行优化。

但针对数据仓库业界来讲,对于一个重要的数据结果,其上游可能存在几十个层级,数百个不同的数据处理任务,从最初的数据到最终的结果,数据流转过程极其复杂,传统的通过人工逐个排查的方式去定位影响数据流程产出的问题节点,存在如下的三项缺点:

  1. 1)覆盖的任务范围有限;

  2. 2)效率低下,判断标准不统一,判定准确率不高;

  3. 3)无法形成知识沉淀,依赖于个人能力;

如果数据流程未能充分优化,一方面会存在数据结果产出时间不稳定,影响数据的及时性;另一方面也会造成计算资源和存储资源的浪费,并且也不易于后续维护。

三、方案

为了避免上述的问题,提升数据流程优化的效率和质量,我们采用了从血缘元数据出发的方案。在数仓任务的执行中,都会依赖于一个调度系统组件,目前业内通用的是以DAG为核心的工作流系统,数据流程中的每个任务都会设置定时执行或者配置上游依赖,这些设置的上游依赖就是我们方案中需要的调度血缘的元数据。

基于上述的血缘数据,我们的方案中需要实现以下两个功能:

  • 基于任务之间的血缘关系生成所有上游任务的层级依赖数据

以调度系统本身的元数据作为出发点,调度系统自身的元数据就包含了一个任务的上游和下游依赖,基于这个数据,通过层级递归的扫描,就可以得到指定根节点任务的所有上游任务的层级依赖结果。

  • 设计合理的算法定位到有问题的任务

在上一步骤得到指定根节点任务的所有上游任务的层级依赖结果后,通过如下三种逻辑定位有问题的任务:

1)定位过度分层:JobA的下游只有JobA1在使用,且JobA是JobA1产出的关键路径,也即JobA1的产出时间由JobA决定,那么此种情形下,我们可以把JobA的逻辑合并到JobA1,这样一方面可以减少大数据任务的启动消耗时间和获取资源的时间;另一方面也可以减少依赖层级,方便后续维护。

2)定位重复依赖:在较复杂的数据流程中,会出现如下的情况:JobB2依赖JobB1和JobB,而JobB1也同时依赖JobB,简化后的情况如下图:

c710c1b571d618ea46cc6a48128c455a.jpeg

此时我们就可以检查JobB2的逻辑,考虑任务内容中涉及到JobB的逻辑合并到JobB1,从而可以实现流程依赖和代码逻辑的合并优化,降低维护成本,提升整体产出时间。

3)定位关键路径:在完成上述两个步骤后,整个流程从结构上已经基本没问题,如果要进一步优化产出时间,需要针对特定任务进行调优,此时可以基于已有的上游层级依赖数据,计算得到每个层级的最晚产出的任务Id,这些任务Id串联在一起就是影响整个流程产出的关键路径,然后对关键路径上的任务进行调优。

上述方案的整体设计图如下:

065b50911ac61360518590709d0ef644.png

四、案例

在对酒店订单明细宽表的优化过程中,基于前期的元数据建设,主要的工作内容分为以下三个步骤:

1)调度优化。调度优化的出发点是合理分配同步任务的优先级,将非核心任务的数据同步延后。从而降低0到2点,酒店订单宽表核心流程执行期间的集群资源压力。

2)模型优化。在这一步骤中,我主要是从两个方向出发:

  • 减少跨层级重复依赖,避免相似逻辑代码的出现,提升数据结果的复用能力。

  • 避免滥用分层,对冗余的分层、中间表进行合并,减少任务调度链路的层级,减少Job数量,节省Job的启动时间。

3)任务优化。通过调整参数设置、SQL逻辑优化的方式对具体任务进行优化需要优化的任务。这一步骤的工作也就是传统认知中的任务优化。

其中第二步和第三步就是基于本文中的方案快速定位到问题任务,整体优化后的效果如下:

  • 酒店订单明细宽表的7日平均产出时间由2:51提前到1:36,提升45%

  • 全流程任务总数量从211个降到145个,减少32%

  • 可控上游依赖任务(非外BU任务)总数量由180降到117,减少35%

  • 关键链路调度层级由11层减少到6层,且其中两层是外部BU任务

五、展望

基于元数据和血缘建设,本方案后续有如下三点可以深入优化:

  • 跨多层判断重复依赖。由于上述实际案例中的酒店订单流程相对不复杂,在仅进行一层的重复依赖判断后,就已经达到了比较满意的优化效果,所以为继续进行多层重复依赖的判断,但从血缘结构上是可以支持多层判断的。

  • 定位多Job中重复/相似逻辑。多个任务依赖同一个上游任务,可以人工进行判断是否存在可合并的重复/相似逻辑;这一点如果要提升效率,需要再结合表的血缘关系一起判断。

  • 多数据流程的优化。在数仓的工作中,一个主题域产出的结果表,通常会存在多张,在进行整个主题域流程的优化或者重构中,也可以利用本案的思想,结构化进行优化工作,提升效率。

【推荐阅读】

mall 电商项目完整部署---实战 mall 后端 SpringBoot,mall‑admin‑web 后台管理 Vue 前端,mall‑app‑sc 移动端 uni‑app 前端;修改数据库、redis、minio、logstash 地址,容器之间 link 别名:mysql 容器别名。🔔排坑:登录报跨域 / 接口报错,检查 prod.env.js 地址,确认 8080 后端服务正常运行。能打开页面,接口列表展示出来,后端部署完成。,所以打包的时候会自动构建镜像,很慢而且你暂时不需要。,容器数据持久化,删除容器数据不会丢失。 阅读详情

相关推荐

python k线顶分型_【缠论】分型、笔的定义及其程序化

K线包含关系处理和分型的定义如果一个K线的高低点全在另一K线的范围里,称之为包含关系。针对这种K线,需要进行一些处理,去除包含关系,处理方法:向上时,把两K线的高点当高点,而两K线低点中的较高者当成低点;反之,当向下时,把两K线的低点当低点,而两K线高点中的较低者当成高点,这样就把两K线合并成一新的K线。经过这样的处理,所有K线图都可以处理成没有包含关系的图形。两K线的包含关系,可以分成四种:1)...

weixin_39717152的博客 2824

大数据毕业设计Python+Spark地铁客流数据分析与预测系统 地铁大数据 地铁流量预测 地铁爬虫 地铁客流量分析 大数据毕设 机器学习 深度学习 人工智能 知识图谱 可视化 计算机毕业设计

大数据毕业设计Python+Spark地铁客流数据分析与预测系统 地铁大数据 地铁流量预测 地铁爬虫 地铁客流量分析 大数据毕设 机器学习 深度学习 人工智能 知识图谱 可视化 计算机毕业设计

全网计算机/大数据辅导(自媒体)道祖第一人、全网粉丝100W+,专注于大学生项目实战开发,讲解,毕业答疑辅导,高校老师/讲师/同行合作。以及产品测评宣传、工具推广等合作。同时招收学生代理、校园代理。 3220

从零开始,用MATLAB/Simulink手把手搭建一个无刷直流电机(BLDC)的控制模型

本文详细介绍了如何使用MATLAB/Simulink从零开始搭建无刷直流电机(BLDC)控制模型。通过可视化建模方法,避开繁琐的数学推导,直接构建三相逆变器、电机本体参数化模型、霍尔传感器与换相逻辑实现,以及速度闭环控制设计。文章还提供了PID控制器整定、抗饱和处理和系统调试的实用技巧,帮助工程师快速掌握BLDC控制系统的仿真与实现。

weixin_27741699的博客 254

干货 | 携程数据血缘构建及应用

作者简介cxzl25,携程软件技术专家,关注大数据领域生态建设,对分布式计算和存储、调度等方面有浓厚兴趣。一、前言Data lineage includes the data origi...

携程技术 2422

Unity开发HoloLens应用:从打包到部署的完整指南

本文为Unity开发者提供了将应用部署到HoloLens设备的完整实战指南。详细讲解了从环境准备、Unity项目配置、生成Visual Studio工程,到最终构建APPX安装包并通过设备门户或Visual Studio进行部署的全流程,帮助开发者高效完成混合现实应用的打包与安装。

red88的博客 1018

从示波器波形看懂死区:手把手教你调ST MCU的PWM,避免三相桥直通炸管

本文详细解析了如何通过示波器波形判断PWM死区时间,并手把手教你调整STM32高级定时器寄存器,避免三相逆变桥直通炸管。文章涵盖死区时间的本质与风险、STM32配置详解、示波器调试技巧及FOC系统中的特殊考量,帮助工程师优化电机驱动性能与安全性。

weixin_30315723的博客 733

Flink 学习日志 03:自定义一个SourceFunction,完成对Redis中数据的读取

本文介绍了在Flink中自定义SourceFunction读取Redis数据的完整流程:通过Jedis客户端连接WSL2中的Redis服务,编写RedisSource实现循环读取所有Key-value并逐条输出,结合Thread.sleep()实现每秒一条的流式效果。关键步骤包括环境准备、添加Jedis依赖、配置IDEA运行时加载provided依赖,并注意生产环境中应避免使用阻塞的keys *,改用scan命令。最终实现动态读取、实时打印,验证了Flink与Redis的数据集成能力。

木木的学习笔记 421

学习笔记|多样本单因素方差分析|事后比较|方差齐性|F检验|韦尔奇检验|两独立样本T检验|两样本方差分析|规范表达|《小白爱上SPSS》课程:SPSS第七讲 | 单因素方差分析怎么做?

学习笔记|多样本单因素方差分析|事后比较|方差齐性|F检验|韦尔奇检验|两独立样本T检验|两样本方差分析|规范表达|《小白爱上SPSS》课程:SPSS第七讲 | 单因素方差分析怎么做?

Medlar_CN的博客 9515

Day3 - Flink 窗口与时间语义:从滚动窗口到迟到数据处理

水位线是一个特殊的时间戳,代表"小于这个时间戳的数据都已经到齐了比如水位线推进到 10:00:05,就告诉 Flink:10:00:05 之前的数据应该都到了,如果还有晚于这个时间到达但时间戳小于 10:00:05 的数据,就是"迟到数据"。窗口大小固定,窗口之间不重叠,数据只属于一个窗口。时间线: 0 10 20 30 40 50 60窗口1: [--------)窗口2: [--------)窗口3: [--------)窗口4: [--------)

YEEMOLY的博客 247

YOLOv8的特征蒸馏代码应用讲解(CWD/MGD/mimic/在线蒸馏/逻辑蒸馏)

基于YOLOv8的逻辑蒸馏、特征蒸馏、在线蒸馏等方法代码介绍。

qq_41920323的博客 2583

Python 爬虫实战:赛事分析平台构建与比赛数据抓取

在体育赛事日益丰富的今天,对比赛数据的收集与分析对于运动员、教练团队以及体育爱好者都具有重要意义。通过构建一个赛事分析平台,我们可以系统地抓取、整理和展示各类比赛数据,为用户提供全面的赛事洞察。本文将深入讲解如何利用 Python 爬虫技术实现这一平台的构建,涵盖从目标网站分析到数据可视化展示的全过程。

u014481728的博客 3180

智能问诊的流程

本文介绍基于FastAPI构建的医疗多Agent系统MediAgent,通过症状分析、诊断推理与治疗建议等模块协同,实现从问诊到报告生成的完整工作流。系统采用前后端分离架构,结合MySQL、RabbitMQ与Docker实现工程化部署,支持异步化验结果接入。虽当前状态暂存于内存,但已具备可扩展性,未来可通过Redis持久化、消息队列联动及医疗安全机制完善,应用于慢病管理、辅助决策等场景,推动AI在医疗流程中的落地应用。

Joey 的工作空间~ 773

一.镜头知识之焦点,焦距,有效焦距,前焦距,后焦距

由光学系统中镜片的最后一面到像面的距离。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 5577

行业研究报告采购避坑指南:从需求拆解到机构选型的实操逻辑

先说结论:买行业研究报告这件事,坑不在“哪家便宜”,而在“你拿到的数据能不能回答你的问题”。作为一个经常帮企业做采购决策的顾问,我见过太多花了几万块买回一堆PDF却用不上的案例。这篇文章把采购流程拆成五步,每一步告诉你该看什么、该避什么,尽量帮你少交学费。

2601_96585642的博客 222

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

大数据与审计专业哪些证书企业比较认可?

大数据与审计专业选证书,首先要明确就业方向:是进入会计师事务所做财务审计,还是进入企业从事内部审计、风险控制,或向数据审计、信息系统审计发展。不同岗位看重的专业能力不同,证书的价值也应放在具体招聘要求中判断。面向2027年的求职与备考规划,值得重点考虑的有六类:初级会计专业技术资格、注册会计师、审计专业技术资格、CDA数据分析师、国际注册内部审计师和国际注册信息系统审计师。选择时,宜采用“财审基础+数据能力+岗位专长”的组合,而不是单纯追求持证数量。

YangYang9YangYan的博客 291

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深入浅出聊聊 Linux 的 PageCache 与系统极致性能

本文深入浅出解析了 Linux PageCache 的核心机制,揭示其如何通过“延迟写、预读读”提升系统性能。以监控告警为切入点,阐明 free -h 中 buff/cache 并非真正占用,真正可用内存由 available 决定。结合 Kafka、Elasticsearch、MySQL 等实战场景,说明中间件如何依赖 PageCache 实现极致性能。强调不可手动清理缓存,并建议合理调优脏页参数,避免卡顿。最终指出:内存满≠危机,而是系统高效运行的体现。

小小默:进无止境 482

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ubuntu安装hadoop系统

本文详细介绍了基于VMware克隆虚拟机搭建三节点Hadoop分布式集群的全过程:使用同一Ubuntu镜像克隆出master、worker1、worker2三台虚拟机,依次配置主机名、固定IP(如192.168.82.10/11/12)、SSH服务及免密登录,确保节点间网络互通。随后安装Java,下载配置Hadoop并分发至各节点,最终初始化启动集群,验证其存储与计算功能,实现高效的大数据环境部署。

qq_43592674的博客 332

Elasticsearch:稠密向量字段类型

dense_vector字段用于存储稠密向量,支持k近邻搜索(kNN),默认启用索引并使用余弦相似度。可接受浮点数数组或Base64编码字符串输入,支持自动量化(如int8、int4、bbq)以降低内存占用。通过index_options配置索引类型(如hnsw、bbq_disk),并可启用过采样与重新评分提升精度。向量默认不存储于_source中以节省空间,可通过fields或_source.exclude_vectors显式返回。支持bit向量及GPU加速索引,适用于高维向量场景。

Elastic 中国社区官方博客 286

Day2 - Flink DataStream API 与转换算子:从 Source 到 Sink

实现或@Override// 发射数据@Override// 使用用自定义逻辑聚合,比 sum/min/max 更灵活。// 求每个用户的总消费金额reduce 的输入和输出类型必须相同。Flink 会把满足条件的相邻算子合并成一个 Task,在同一个线程里执行,减少线程切换和网络开销。合并条件上下游并行度相同;分区策略是 Forward;没有被用户手动断开。

YEEMOLY的博客 159

【消息队列】ACK确认了什么:消息队列可靠投递的完整链路

本文剖析消息系统中ACK机制在生产者、Broker、消费者三段链路中的作用,指出即使三段确认均正确配置,系统仍只能提供“至少一次”可靠性。原因在于重试、崩溃、重平衡等场景会导致重复投递,而“恰好一次”需依赖业务侧幂等性保障。关键结论:ACK仅保证不丢,不重复需靠唯一键、去重表或状态机等业务设计实现。

2503_94545876的博客 697

kafka指定分区消费

【代码】kafka指定分区消费。

hy_208的博客 60

数据科学与大数据技术专业有哪些比较好考的证书?

如果目前还没有明确方向,建议先完成Python与SQL基础学习,再选择一张与目标岗位最接近的证书。不要为了增加简历条目,在同一阶段同时准备多个不同技术方向。以数据分析方向为例,可以参考2025版CDA证书大纲安排基础学习:先掌握业务数据结构、数据库应用和统计分析,再进入指标体系、看板和用户分析。具备一定项目经验后,再学习二级涉及的统计检验、模型评估及数据治理。2025版教材介绍强调了思维、技术和实践的结合,适合用于组织学习;2027年的具体考试范围、报名条件和安排,则应依据届时发布的信息制定计划。

YangYang9YangYan的博客 331

如何在用户认证系统中使用 ElasticSearch 提升

本文介绍了如何在一个典型的企业级应用——用户认证与权限管理系统内引入并运用 ElasticSearch 技术来提高查找效率并降低数据库负载压力。读者可以通过了解其基础架构原理、正确配置方式以及典型应用场景从而掌握该工具的基本用法。如果你正在寻找一种更灵活高效的检索方案用于自己的项目当中,请考虑从以下几个方面入手实践: 1. 确认是否有必要引入新的全文搜索引擎;2. 设计好适用于该项目的数据模型以及索引规则;3. 持续优化你的 DSL 查询语句并监控运行状态;

wuchangjian的专栏 176

Flink SQL 窗口表值函数实战:滚动、滑动、累计与会话窗口

在 Flink SQL 中,流数据是无限的,要统计“最近一段时间”的数据,就必须把无界流切分成一个个有界窗口。Flink 1.13 之后引入了窗口表值函数(Window TVF),把窗口本身当作一张表来使用,通过TABLE(...)语法把原表转换成带窗口信息的表,再配合GROUP BY完成聚合。相比早期的语义统一:窗口是一张表,可以像普通表一样查询、过滤、关联。结果可读:窗口表会自动带上window_end三个字段,方便直接输出。性能更好:底层基于窗口聚合算子优化,支持切片共享等机制。

2401_83857914的博客 358

Flink 知识大总结:从核心概念到生产实践

Flink 的知识体系可以概括为「一个核心、两大抽象、三层保障」:以流为核心,以 DataStream 和 Table/SQL 为两大编程抽象,以状态管理、Checkpoint 容错和端到端一致性为三层保障。掌握这些主干知识后,再结合具体业务场景深入调优,就能在生产环境中稳定发挥 Flink 的实时计算能力。

2401_83857914的博客 324

数据库教程FGMT79:国产数据库-TiDB分布式数据库工程师培训实战教程(PB级大数据平台、大规模分布式集群架构)

本文为国产分布式数据库TiDB实战教程,系统讲解其架构原理与生产级部署。涵盖从环境准备、单机测试到十节点OLTP/HTAP集群部署、扩缩容、两地三中心容灾等全流程操作。基于64G内存8CPU配置,以TiUP工具实现自动化管理,深入解析存储、计算、调度三大核心机制。强调兼容MySQL协议,支持金融级高可用与弹性扩展,适用于PB级大数据平台与HTAP场景。适合DBA、运维及架构师快速掌握TiDB生产实践,无需重写业务代码即可实现平滑迁移。

风哥oracle/mysql/pg技术教程 152
上一篇: 开源 | 携程 Redis On Rocks 实践,节省 2/3 Redis成本
下一篇: 干货 | 携程旅游大语言模型系统介绍及其应用
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值