Doris实践——同程数科实时数仓建设

目录

前言

一、早期架构演进

二、Doris和Clickhouse选型对比

三、新一代统一实时数据仓库

四、基于Doris的一站式数据平台

4.1 一键生成任务脚本提升任务开发效率

4.2 自动调度监控保障任务正常运行

4.3 安全便捷的可视化查询分析

4.4 完备智能的集群监控

五、收益与成果

六、未来规划


   原文大佬介绍的这篇Doris实时数仓建设有借鉴意义,现摘抄下来用作沉淀学习。如有侵权,请告知~

前言

     同程数科是同程集团旗下的旅游产业金融科技服务平台,近年来,随着同程数科业务的不断拓展和用户量的不断增加,越来越需要一个可靠、高效的数据中心,以帮助企业更好地了解业务运营情况和制定策略,这包括不限于建立实时业务报表看板,实时业务指标预警,营销用户画像与标签,以及金融风控实时监测等分析工具。因此,更加关注于实时数仓的构建,希望利用数仓帮助业务人员提升数据开发效率与质量,从而为业务分析提供强大的后盾。

   如今,数仓架构已经经历了三代演进,在经过第一代离线架构与第二代Lambda 架构的使用后,通过需求分析与调研,最终引入了Doris搭建统一的实时数据仓库。下文将详细介绍三代架构的演进过程,分享如何基于Doris 搭建一站式数据平台 Ark,以及如何在业务使用,系统维护,数仓开发等方面达到降本增效的收益与成果。

一、早期架构演进

     在大数据技术发展和运用的初期,同程数据以 Apache Hive 为核心建立了离线数仓,并使用Hive进行数仓分分层,当数据从源头进入离线数仓后,通过ODS,DWD,DWS层级处理,数据输出至MySQL、Redis、HBase 等应用数据库,以供报表平台使用。该架构虽然具有耦合性低、稳定性高等优势,但其缺点也比较明显,主要体现在:当进行局部更新时需要对数据进行全量合并,流程冗长,使数据更新时间变长,时效性无法得到保证。随着数据规模不断增加,局部更新需求越来越多,该架构在数据计算效率低下和资源利用不充分的弊端也变得愈加明显。

   基于第一代架构存在的问题,我们对架构进行了升级改造。第二代架构为典型的Lambda 架构,在保留原有离线数仓的同时,新增了以 Apache  Flink 与 Apache Kafka为核心的实时数仓。在该架构中,离线链路主要对数据进行批量处理,负责解决周期性数据跑错的问题,新增的实时链路利用 Flink 对于数据源进行流式处理、利用 Kafka对数仓分层,最终输出至应用数据库

   尽管该架构解决了第一代架构中数据时效性较低的问题,但是发现仍存在一些使用痛点:

  • 架构复杂,运维难度高:由于两套链路同时运行,实时链路需要通过 Apache Flink 与 Apache Kafka 对数据进行流处理,离线链路需要利用 Apache Hive 与 Apache Spark对数据进行批处理,并且两条链路的维表层中均利用 MySQL 或 Redis 进行存储,这导致整体架构涉及的组件过多,数据处理流程过于复杂。除此之外,该架构会重复计算相同的数据,导致整体资源占用增加、运维管理成本增加,后期维护难度增加。
  • 数据开发成本高:实时数仓部分完全依赖 Apache Kafka进行数仓分层,而Kafka对于数据存储周期具有限制,新的数据导入任务需要进行额外的开发工作,还将极大增加开发成本。
  • 数据一致性低:相同的数据在实时数仓中流处理,离线数仓中批处理,存在数据处理逻辑不统一的问题,数据不一致与准确性得不到保障,由于无法复用第一代架构中的数据血缘,数据质量等管理体系,在运行过程中,当实时链路出现乱序问题时,需要回放全量日志进行数据回溯,增加数据修复的复杂性。

二、Doris和Clickhouse选型对比

  为了彻底解决早期架构的问题,在引入新架构之前,我们决定进行深度的产品调研来选择更适合的数仓搭建方案。后发现 MPP 架构数据库能够支持统一实时的数据分析,可以有效解决 Lambda 架构复杂,数据一致性无法保障的问题,而这一产品细分下,Doris与Clickhouse比较匹配业务诉求。基于此,对这两款MPP架构数据库进行了选型对比,并发现Doris的表现更加优异,非常符合我们的选型要求,具体表现如下:

  • 产品易用性:ClickHouse 不支持标准 SQL,而 Doris支持标准 SQL 并兼容 MySQL 协议,使开发人员上手简单,不需要付出额外的学习成本。

  • Join性能优异:Doris支持分布式Join,查询灵活度较高,且性能表现优异。而ClickHouse由于Join查询限制,函数局限性以及可维护性较差等原因,不满足我们当前的业务需求。

  • 数据导入:Doris的数据导入功能完备,支持 Routine Load、Stream Load 和 JDBC Insert Into等多种导入方式,即使在海量数据也能保持数据稳定写入,性能与速度远远高于ClickHouse。

  • 运维难度:Doris架构精简,只有FE和BE两种角色,整体部署简单快速,在扩容方面非常快捷,支持滚动升级,只需要替换相关安装包即可。而Clickhouse对组件的依赖较高,在使用和扩容上需要做很多准备工作,这就要求提供专业的团队来支撑日常的开发与运维工作。

  此外,Doris可以支持实时数据服务,交互数据分析和离线数据处理等多场景。Multi-Catalog 提供了联邦查询的能力,支持对多个数据源进行读取,提高数据的准确性和质量,简化任务开发流程。此外,这一功能可以使开发人员更快速地找到所需数据,减少查询时间和成本,提高查询效率。因此 Doris 的高效运行性能和低开发成本的优势,更符合对一站式数据平台搭建的需求。

三、新一代统一实时数据仓库

    引入 Doris 后对架构进行了重构,如上图所示,使用Doris统一进行数据存储与计算,完全替代了原先的离线架构和Lambda 架构,并构建了一站式数仓,不仅保证了数据的一致性,还实现了架构的精简,极大降低了架构运维成本。其次,在数据源进入实时数仓时,新增了 Input 统一数据集成引擎,支持多种异构数据源的数据同步,实现数据入口的统一。总而言之,Doris 的引入真正帮助实现了数据集成,存储,计算,输出方面的统一,真正意义上实现了实时统一数仓。

四、基于Doris的一站式数据平台

   基于新一代的数仓,搭建了一站式数据平台 Ark,希望通过该数据平台实现任务开发,任务提交与测试,任务调度与监控,数据查询,集群监控等一体化服务,为内部人员在实时业务中提升任务开发效率,提高任务监控质量。在平台构建之前,对于目标进行了拆解梳理:

  • 数据开发:希望外部数据接入Doris时可以高效地进行ETL开发,提升报表产出速度。
  • 调度管理:在业务人员开发完成并上线任务后,需要保证任务调度的稳定性以及调度恢复能力,避免问题发生。
  • 数据查询:由于生产与办公网络中间有隔断,办公网络不能直接使用生产网络的连接,只能通过 Web 形式解决网络隔断,希望借助平台能够提供安全便捷地查询和分析方式。

4.1 一键生成任务脚本提升开发效率

    Doris支持丰富的数据源接入,利用这一功能,在 Ark 平台中可以根据不同的数据源,获取相对应的元数据信息来形成脚本,实现任务快速生成。在数据接入方面,平台进行了半自动化代码的相关工作,并创建了快速生成组件。如上图所示,在平台中输入数据源或表的信息可以自动生成Routine Load 脚本。基于该脚本,只需要对 Apache Kafka 接入源进行 Topic 修改,即可马上生成 Routine Load 任务。同样,对于 Broker Load的任务开发原理相同,在选择对应的数仓源之后,可以及时生成Broker Load 所需脚本。利用 Doris多源异构数据的写入能力,平台能够快速构建代码,实现对 Routine Load 与 Broker Load 的高效任务开发。

4.2 自动调度监控保障任务正常运行

  在任务开发与提交后,平台可以针对Routine Load或Broker Load任务进行查询,检查是否存在异常等常规调度操作,对于需要特别关注的任务,可以加入监控列表,这样系统会定期自动地对任务进行扫描,发生问题时会进行提示并尝试将任务重新拉起。此外,由于Routine Load是常驻进程,对于该任务的监控,平台支持定期且持续的自动化监控功能,而对于 Broker Load 与其他常规任务,平台在定期扫描后会对失败的任务进行预警提示。

4.3 安全便捷的可视化查询分析

   由于生产与办公网段隔离,只能通过 Web 进行查询,使用起来繁琐且不方便。为了解决这个问题,曾经尝试使用集成 Hue 的方式,使 Doris 通过 MySQL 协议连接到Hue进行数据查询,虽然查询过程有所简化,但是这种方法存在数据安全隐患。因此,同程数科自行开发了内部查询分析页面,设置了权限管理,解决了查询安全性的问题。同时在 Ark 平台中集成了 Doris Help功能,使业务人员能够通过关键字搜索进行 SQL 语法和示例的查询,解决常规查询操作问题,以此降低学习成本,提高内部人员查询的便捷性。

4.4 完备智能的集群监控

   通过 Doris 集群监控页面可以实时监管 FE 、BE 以及 Broker节点状况。当集群发生异常状况时,监控系统会发送自动提醒并尝试将集群拉起,及时对异常情况进行自动化处理,避免引发更大的问题。同时集群监控看板也可以帮助观察节点的健康度情况,通过FE节点状态判断健康度高低。

五、收益与成果

   当前同程数科已经基于Doris 搭建了高度统一实时的数据仓库,并使用数十台Doris节点机器。此外,还将 Doris 功能平台化至 Ark 一站式数据平台中,对于 Doris 的引入带来了以下收益与成果:

  • 缩减开发周期:利用平台一键开发功能,业务人员能够自主开发,无需将需求提给大数据团队,开发时间由原来的半小时缩短到仅需三分钟,显著压缩了任务开发周期,开发效率提升了十倍;
  • 灵活数据开发:配合Ark一站式数据平台,数据开发能够灵活分析,需要可以快速上线;
  • 统一数据处理:Doris在数据导入、存储、计算实现统一,保证数据一致性,实现真正意义的实时统一;
  • 提升查询效率:从过去分钟级响应时间到当前的秒级甚至毫秒级,查询效率得到数十倍提升。
  • 降低学习成本:因为 Apache Doris 兼容 MySQL 协议,并且使用标准 SQL,在使用上简单易用。业务人员能够如同使用数据库一样使用大数据,从而进一步降低学习成本;

  • 降低运维成本: Doris 的部署简单,精简架构使整体链路体系简洁,便于维护。

六、未来规划

    未来将会持续建设并优化基于Doris 一站式实时数仓架构,完善统一计算和存储、流批一体能力。对于 Ark 一站式数据平台持续迭代增强,整个实时数仓体系向着时效性、稳定性、灵活性发展。完善 Ark 数据集成平台的图形化功能,持续增加更多异构数据源之间的数据同步功能,增强引擎对数据的处理能力。

    其次,将持续关注 Apache Doris 在数据湖分析方面的能力,希望在湖中能够对多源异构数据进行采集,实现数据统一存储、统一多范式计算,最后由Doris 的 API 接口统一对外提供服务。另外在后续的架构优化中会考虑利用倒排索引替换现有的日志系统,利用更新的 Json 数据类型进一步完善查询能力。

参考文章:

同程数科基于 Apache Doris 构建统一实时数仓,查询提速数十倍!

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

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

相关文章

线控悬架系统分析

线控悬架系统分析 附赠自动驾驶学习资料和量产经验:链接 1 线控悬架系统系统发展现状 • 车辆驾乘过程中,操控性和舒适性是两个重要的评价指标,两者很难兼顾; • 线控悬架就是根据路况实际情况自动调节悬架的高度、刚度、阻尼实…

012_control_flow_in_Matlab中的控制流

Matlab中的控制流 虽然,我们说Matlab中的计算是向量化的,但是在某些情况下,作为一个“程序设计语言”,Matlab也提供了一些控制流结构,来帮助我们实现一些复杂的逻辑。 我会在介绍控制流的时候,提醒如何用…

Ansys Zemax | 如何将光栅数据从Lumerical导入至OpticStudio(上)

附件下载 联系工作人员获取附件 本文介绍了一种使用Ansys Zemax OpticStudio和Lumerical RCWA在整个光学系统中精确仿真1D/2D光栅的静态工作流程。将首先简要介绍方法。然后解释有关如何建立系统的详细信息。 本篇内容将分为上下两部分,上部将首先简要介绍方法工…

【Leetcode】top 100 技巧

136 只出现一次的数字 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 技巧&#xff1a…

LeetCode 96. 不同的二叉搜索树

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5示例 2: 输入:n 1 输出:1提…

代码随想录算法训练营第二十二天| 235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

系列文章目录 目录 系列文章目录235. 二叉搜索树的最近公共祖先①递归法自己写的简洁版 ②迭代法不能这样写!正确写法 701.二叉搜索树中的插入操作①递归法②迭代法 450.删除二叉搜索树中的节点递归法 235. 二叉搜索树的最近公共祖先 ①递归法 自己写的 class So…

书生·浦语大模型InternLM-Chat-1.8B 智能对话 Demo 第二期

文章目录 InternLM-Chat-1.8B 智能对话 Demo环境准备下载模型运行 InternLM-Chat-1.8B web 运行八戒 demo下载模型执行Demo InternLM-Chat-1.8B 智能对话 Demo 环境准备 在InternStudio平台中选择 10% A100(1/4) 的配置(平台资源有限),如下图…

【c语言】自定义类型:联合体(公用体)【详解】

联合体 联合体类型的声明 像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共用体。 给联合体其中⼀个成…

2024阿里云域名优惠口令免费领取,COM、CN和xin域名口令

2024年阿里云域名优惠口令,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”,cn域名注册优惠口令“互联网上的中国标识”,阿里云优惠口令是域名专属的优惠码,可用于域名注册、续…

【QT入门】 自定义标题栏界面qss美化+按钮功能实现

往期回顾: 【QT入门】 鼠标按下和移动事件实现无边框窗口拖动-CSDN博客【QT入门】 设计实现无边框窗口拉伸的公用类-CSDN博客【QT入门】对无边框窗口自定义标题栏并实现拖动和拉伸效果-CSDN博客 【QT入门】 自定义标题栏界面qss美化按钮功能实现 一、最终效果 二、…

【JAVASE】学习类与对象的创建和实例化

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 目标: 1. 掌握类的定义方式以及对象的实例化 2. …

MVCC的实现原理

简介 MVCC(Multi-Version Concurrency Control)即多版本并发控制。 MVCC的实现原理 我们在了解MVCC之前,首先先了解一下几个比较常见的锁。 **读锁:**也叫共享锁、S锁,若事务T对数据对象A加上S锁,则事务…

一维卷积神经网络的特征可视化

随着以深度学习为代表的人工智能技术的不断发展,许多具有重要意义的深度学习模型和算法被开发出来,应用于计算机视觉、自然语言处理、语音处理、生物医疗、金融应用等众多行业领域。深度学习先进的数据挖掘、训练和分析能力来源于深度神经网络的海量模型…

使用OpenCV4.9的随机生成器和文本

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV 4.9基本绘图 下一篇:OpenCV系列文章目录(持续更新中......) 目标 在本教程中,您将学习如何: 使用随机数生…

软件架构风格_2.调用/返回体系结构风格

调用/返回风格是指在系统中采用了调用与返回机制。利用调用-返回实际上是一种分而治之的策略,其主要思想是将一个复杂的大系统分解为若干子系统,以便降低复杂度,并且增加可修改性。程序从其执行起点开始执行该构件的代码,程序执行…

分发饼干(力扣455)

文章目录 题目贪心算法思想概述关键要素解题步骤优缺点优点缺点 应用领域 题解一、思路二、解题方法三、Code 总结 题目 Problem: 455. 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i&am…

2024 ccfcsp认证打卡 2023 05 01 重复局面

2023 05 01 重复局面 题目题解1题解2区别:数据存储方式:时间复杂度:空间复杂度: 总结: 题目 题解1 import java.util.*;public class Main {public static void main(String[] args) {Scanner input new Scanner(Sys…

Stream 流和 Lambda 组装复杂父子树形结构

在最近的开发中,遇到了两个类似的需求:都是基于 Stream 的父子树形结构操作,返回 List 集合对象给前端。于是在经过需求分析和探索实践后有了新的认识,现在拿出来和大家作分享交流。 一般来说完成这样的需求大多数人会想到递归&a…

面试题 之 vue

1.vue里怎样实现双向数据绑定? Viewmodel 中的Domlisteners 工具会帮我们检测页面上Dom元素的变化,如果有变化,则更改Model中的数据,更新model中的数据时,数据事件绑定工具会帮我们更新页面中的Dom元素 2.Vue的响应式原…

3d代理模型怎么转换成标准模型---模大狮模型网

在当今的虚拟世界中,3D建模技术被广泛运用于游戏开发、电影制作、工业设计等领域。在3D建模过程中,有时会遇到需要将代理模型转换成标准模型的情况。模大狮将从理论和实践两方面,介绍如何将3D代理模型转换成标准模型,以帮助读者更…