Apache Doris 实时数据仓库的构建与技术选型方案

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: Apache Doris 实时数据仓库的构建与技术选型方案

引言

数据仓库想必每个行业从业者都在以各式各样的方式进行实践和应用,在久远一点叫做离线数仓,后来由被称为数据中台等演化名称,再往后,又衍生到现代化实时数据栈这样的概念中,但说到底,终究还是为了解决数据的接、存、管、算、查这五个要义的,无论是多么具有附加价值的其他能力,也都是围绕这五个基本核心功能延展的。

那今天我们主要来念叨念叨,在我从业这些年沉淀下来的关于数据仓库方向的一些个人观点和看法,尤其这两年主要在参与 Apache Doris 和 SelectDB 实时数据仓库的解决方案架构设计、技术支持和生态研发的过程中,在司内和业内诸多大佬的言传身教下,个人感觉还是收获满满的,那咱们就 OPEN 起来,来跟大家唠唠我个人眼中的实时数仓。

注:本篇只讨论实时数据仓库,不涉及数据湖组件。

为何要实时化

想必大家也看到了在当前大数据的火热前沿领域,OLAP 数据库的热度是持续走高,无论是老牌大哥 ClickHouse,还是从 21 年开始发力的 Apache Doris,无论是从认知还是从实践上,都把数据时效性这个概念要求标准,提升了不少。

从过往的传统 T+1 或者小时级的数据时效性,突然之间提升到分钟级到秒级,这种感官上巨大的差异性给从业者带来的是一波又一波的焦虑和渴望。

焦虑是负责平台基础建设的同学们思考的事情,要求提速、降本、增效,但是现阶段也没有特别通俗适合的案例做参考,一时之间不知道从何下手;渴望的是负责业务开发和数据应用的同学,因为新的时效性带来的可能不仅仅是取数、出数的快与慢,而在于对于业务本身的帮助,可能非同日而语了。

这里多说几句,为啥时效性会比较大比重的提升整个数据平台在公司/集团内部的重要性呢?

很简单,因为真的会降本增效。

举个例子:

电商公司在某一次新品上市活动中投入了大量的人力物力,做了广泛的渠道宣发和营销触达等动作,营销总监希望尽快的拿到这一波触达后的营销数据,因为无论是根据已触达的人群的反馈做二次营销,还是根据未成功触达的人群做二次触达,时间越前置,那么二次触达/营销的效果就越好。

根据上述理论举个不是特别恰当的比喻:

情景一:你点了一个外卖,感觉质量还不错,店家在你刚刚酒足饭饱满意的剔牙的时候给你打电话求一个五星好评

情景二:第二天了你都忘了昨天的那味咋样了,或者已经又吃了一家,觉得昨天那味道也就一般般,这时候店家打电话过来索要好评

这两种情况下,成功概率完全是不一样的。

所以在业务场景,提升到分钟级和秒级的时效性对业务形态的帮助会很大。

同时重中之重的一点一定是比较关键的,这也是很多公司匆匆组建大数据部门,随后又匆匆裁剪的原因:阐述不清楚数据部门对公司业务产生的帮助价值,换句话说就是业务部门不认可数据部门提供的价值。

而平台部门和数据部门,往往都是整个公司/集团的成本部门,想要成本部门逐步做强做大,或者最起码保住基本盘,就是让那些受你技术利好的业务方认可你的价值,而时效性是最能很明显的提升业务价值和使用体感的方面。

所以实时化一方面是为了满足日益增强的业务应用诉求,一方面是为了降本增效,还有一方面,是为了讲明价值、提升不可替代性。

数仓中实时的含义

首先我们明确一个点,实时数仓的实时怎样界定?

纳秒?微秒?毫秒?还是秒级?分钟级?

从我接触和实践的数百家企业的具体应用来看,这不是一个明确的概念值,以下个人结论加粗标识:

应以业务方接受的最大延迟限度作为实时的研发标准。

道理很简单,无论是开发 APP,还是做基础平台,我们一定应以用户体感和用户看问题的角度来做整体架构设计和能力定位,比如:

  1. 1. 你的用户对象是之前是用 Hadoop-Hive 那一套的同学,那么从 T+1 或小时级提升到分钟级,他们就会觉得,这已经很实时了;
  2. 2. 你的用户对象是用 ClickHouse 做 OLAP 查询的同学,那么你想在查询端更实时,那很困难了,但是如果链路性时效性提升呢?比如之前都是离线数仓的 ADS 层报表通过 Sqoop 同步一份到 ClickHouse,现在用 Flink 做直接部分业务指标的实时计算,这时候他就会觉得,这很实时了;
  3. 3. 你的用户对象之前是用 Hadoop-Spark 的同学,那么你只有提升到时效性到秒级,他才会有比较大的感触;
  4. 4. 你的用户对象之前是用 Flink+Kafka+Hbase 做纯流式指标计算,那么你无论怎样提升链路时效性,他都会没啥太大的感觉,这时候如果你能解决 Flink+Kafka+Hbase 不太好完成复杂运算、整体任务编排运维复杂、中间态数据重复利用等问题【比如数据迟到等等问题】,那么他才会有比较大的感触。

所以针对不同的同学,对实时的体感或者要求是不一样的,像之前我遇到的有金融行业的部分核心系统,需要关联数据查询时延在 5ms 内,对你没看错,是五毫秒内,这种就对单一组件的要求极高了。

这里还有两个关于实时的概念我们掰开来扯一扯。

  1. 1. 实时数仓的实时定义是哪些部分实时?
  2. 2. 我们需要完全纯流式实时的数仓么?

第一个问题,我认为实时数仓是在满足业务方接受的最大延迟的限度下,接、存、管、算、查全链路的实时化才叫现代化实时数仓,不是单纯查的快或者存的快,完整链路的时效性提升才算实时化。

第二个问题,我认为时效性趋近实时化是大势所趋,但是完全纯流式实时的数仓是一个伪命题,这里我想表述两个点:

  1. 1. 从我参与或者主导过的数百家企业的数仓演进方案的角度而言,绝大部分的业务场景,尤其是分析类场景,数据时效性只需要3-5分钟级,在这个级别的业务诉求占据了绝大部分,同时有少量的业务场景需要秒级的全链路实时性,有极少数的业务场景才存在毫秒级及以内的数据时效性诉求。
    换而言之,从 T+1 进化到分钟级,以当前的解决方案和组件能力而言,可能不是什么难事,反而还可能降低机器成本,同时业务方一般在分析查询领域,分钟级其实对他们而言是完全够用的,一个查询结果生成到后续人工讨论出决策方案然后再落地执行,这种周而复始的工作周期分钟级的时效性粒度可以充分的满足,这就完美的实现全面的降本增效,打了一手好牌。
  2. 2. 那如果是从分钟级要求到毫秒级,这时候随便划拉一个场景:一批数据(可认为是有界流的方式)生成后需要根据这批数据的各个维度做复杂链路加工,数据量级每日新增 1TB。有经验的同学一看就头大了,因为这种你要支持到毫秒级,那花的资源可就不是降本增效了,而是超级加倍也可能完成不了。
    加倍了资源,可能得到了一个做不到的结论或者不稳定的一个业务服务系统,那么接下来的结果可能就不是很乐观了~

所以综上,一个小建议给大家,尽可能不要给业务许诺太过于好看的时效性,尽可能给自己争取到更多的冗余空间,因为无论咋说,保住工作才会有各种后续,对吧 ^_^

实时常见方案常见诉求

那聊完了两个概念的定义以后,我们来看看我们需要怎样的解决方案。

按需求的优先级,我们划拉一下我们需要解决的问题。

我们希望的是(或者你期待解决的场景如果是):

  1. 1. 大部分的简单业务时效性足够高,最好实时,但是数据要保证一致性,最终一致性
  2. 2. 整体架构复杂度低一些,不想引入太多组件增加运维成本
  3. 3. 能做主数仓,不需要强依赖使用离线数仓做数据校对
  4. 4. 能处理一些复杂计算,但是时效性要求不要太迟
  5. 5. 数据存储压缩比不要太高,可以降低一些存储成本
  6. 6. 整个实时数仓的架构生态拓展性要好,比如可以对接其他组件做联邦之类的,减少工作复杂度
  7. 7. 最好能流批一体、离在线一体,共用一份数据,减少数据冗余性
  8. 8. 稳定性要足够好,最好像 MapReduce 一样稳定……

基于 Apache Doris 的实时数据仓库

能力描述

查询能力

  1. 1. 大宽表查询
    「ClickBench-Top1」
  2. 2. Join查询
    「等量资源下比 Impala 快 5-10 倍」
  3. 3. 高并发点查
    「单台节点可至 3w QPS 20-50ms 延迟」
  4. 4. 联邦查询
    「数据湖、十几个支持 JDBC 协议的 TP 库」
  5. 5. 日志检索
    「速度与 ES 持平,存储下降 80%,吞吐提升 5 倍」
  6. 6. 库内 ELT
    「等资源下数仓调度比 Hive 快 8-10 倍」

在整个数据分析领域,实质上绝大部分查询都是以上六种查询姿势,所以这也是为什么 Apache Doris 能做一个轻量级实时数据仓库的底气所在。

导入能力

  1. 1. 文件
    「JSON、CSV、Parquet、ORC 等」
  2. 2. 业务数据库
    「MySQL、Oracle、DB2、SQLServer 等」
  3. 3. 程序运行数据
    「Java、Go、Python 等」
  4. 4. 消息中间件和日志采集工具
    「Kafka、logstash、flume 等」
  5. 5. 计算引擎和工具
    「Spark、Flink、DBT、Airbyte 等」
  6. 6. 数据同步工具
    「X2Doris、Datax、SeaTunnel、Hop、Kettle 等」
    还有未尽的其他方向的导入能力

存储能力

  1. 1. 单次导入事务性控制,可保证精准一致性语义
  2. 2. 存储默认3副本,以多数派原则满足写时可靠性
  3. 3. 导入后自动进行 Compaction,无需手动执行
  4. 4. 3副本下若有坏片可自动调度修复
  5. 5. 数据均衡 Rebalance 自动完成
  6. 6. 增删节点数据迁移自动完成无需手动
  7. 7. 冷热分层大幅度降低存储成本
  8. 8. 备份恢复机制
  9. 9. 数据吞吐速度最高可至 1GB/s【日志场景】

内核能力

  1. 1. 分布式 Join MPP 计算框架
  2. 2. CBO + RBO
  3. 3. Pipeline 执行引擎
  4. 4. 向量化计算引擎
  5. 5. Catalog 联邦能力
  6. 6. 行列混存 + 短路径优化
  7. 7. WorkLoad Group
  8. 8. 库、表、行、列【重构中】完备权限

综上,数据从接入到存储再到查询,Apache Doris 的全链路生态完备齐全,能力覆盖范围齐全,各项性能也基本都是T0梯队的,所以基于以上的各方面综合能力论述,Doris 是可以满足轻量级实时数据仓库这一现代化数据仓库演进路线的诉求的

没错,它就是海纳百川的那个海~

构建建议

基于 Apache Doris 构建实时数仓基本上有如下几种方案:

  1. 1. 微批调度方案
  2. 2. 物化视图方案
  3. 3. 流批结合方案
  4. 4. 离在线一体化(湖仓一体化)方案

这里由于篇幅过长,就不展开做各项方案的介绍了,这一块会另起一篇来做介绍。

这里来介绍一些在构建实时数仓时候的实现建议:

  1. 1. 分层构建理论永不过时,但是由于实时数仓追求的时效性要求相对离线数仓较高,同时实时数仓的计算能力又强于离线数仓的计算能力,故而分层不必按离线数仓的 4-5 层进行划分,若业务复杂性低,一般 2 层就可以提供服务,若业务复杂性高,3 层也基本可满足大部分的业务场景,把构建模型做薄有利于数据流转和数据治理。
  2. 2. 调度尽量以分区调度为主,Partition 粒度应当随着业务粒度进行合理划分,常见粒度为天级别粒度,往往在业务上 1-7 天的数据使用率会比较高,同时在近七天这个区间内,往往以当天数据使用占比最大,所以合理的分区可大幅度降低数据加工时的资源压力和调度速度,以此来提速整理数据流转效率
  3. 3. 在业务开发复杂度、模型复用性、并发度和单查询资源消耗比四个粒度来综合分析开发时的分层模型构建选择,比如若是并发查询度较高的,就尽量固化成上层表来减少资源消耗和提升查询速度与并发度,比如灵活查询较多的,就开放 DW 集市层出去,降低开发工作量,但是这里还得再评估单资源查询复杂度,以及是否开启 SQL 审计和黑白名单等等,以保证大小查询的稳定性,实时数仓建模比较考量业务时效性以及开发成本和集群资源成本的综合性评估能力。
  4. 4. 在资源管控方面做更多考量,如多租户的资源划分、WorkLoad Group 的资源限制、黑白名单和审计日志的异常阻拦、权限细粒度化控制、内外表及冷热分层的成本缩减等各方面的综合能力利用。需要在一定资源量的情况下完成更多和更合理的资源利用,保证重点任务。因为实时数仓与离线数仓最大的一个不同点在于实时数仓需要更贴近上层应用来完成直接性的业务支撑,所以上层业务的敏感度会非常高,对底层要求也随之变高了。

还有一些余着后面慢慢唠~

小结

本篇主要介绍了实时数仓的基本概念、同时介绍了以 Doris 为基准的实时数仓构建能力选型和构建建议,也没有追求什么语言上的华丽和遣词造句的规整,以大白话的形式给大家写了一篇,还望大家多多见谅~

也是希望以这样的行文,给大家带来一些不一样的思考:我们追求的实时到底是什么东西?

如果大家喜欢,就点个在看和赞,让我更有动力写下去,哈哈哈

老规矩,微信号:fl_manyi

努力更新!争取让看官老爷们看到更广泛的 Doris 使用姿势方法以及经验建议,让大家在实践路上更轻松自在和信心满满!


相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
21天前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
64 5
|
20天前
|
存储 数据挖掘 数据处理
巴别时代使用 Apache Paimon 构建 Streaming Lakehouse 的实践
随着数据湖技术的发展,企业纷纷探索其优化潜力。本文分享了巴别时代使用 Apache Paimon 构建 Streaming Lakehouse 的实践。Paimon 支持流式和批处理,提供高性能、统一的数据访问和流批一体的优势。通过示例代码和实践经验,展示了如何高效处理实时数据,解决了数据一致性和故障恢复等挑战。
99 61
|
16天前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
11天前
|
SQL 存储 Java
Apache Doris 2.1.7 版本正式发布
亲爱的社区小伙伴们,**Apache Doris 2.1.7 版本已于 2024 年 11 月 10 日正式发布。**2.1.7 版本持续升级改进,同时在湖仓一体、异步物化视图、半结构化数据管理、查询优化器、执行引擎、存储管理、以及权限管理等方面完成了若干修复。欢迎大家下载使用。
|
17天前
|
监控 Cloud Native BI
8+ 典型分析场景,25+ 标杆案例,Apache Doris 和 SelectDB 精选案例集(2024版)电子版上线
飞轮科技正式推出 Apache Doris 和 SelectDB 精选案例集 ——《走向现代化的数据仓库(2024 版)》,汇聚了来自各行各业的成功案例与实践经验。该书以行业为划分标准,辅以使用场景标签,旨在为读者提供一个高度整合、全面涵盖、分类清晰且易于查阅的学习资源库。
|
17天前
|
SQL DataWorks 关系型数据库
阿里云 DataWorks 正式支持 SelectDB & Apache Doris 数据源,实现 MySQL 整库实时同步
阿里云数据库 SelectDB 版是阿里云与飞轮科技联合基于 Apache Doris 内核打造的现代化数据仓库,支持大规模实时数据上的极速查询分析。通过实时、统一、弹性、开放的核心能力,能够为企业提供高性价比、简单易用、安全稳定、低成本的实时大数据分析支持。SelectDB 具备世界领先的实时分析能力,能够实现秒级的数据实时导入与同步,在宽表、复杂多表关联、高并发点查等不同场景下,提供超越一众国际知名的同类产品的优秀性能,多次登顶 ClickBench 全球数据库分析性能排行榜。
|
3月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
46 1
|
1月前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
596 13
Apache Flink 2.0-preview released
|
1月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
68 3
|
2月前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。

热门文章

最新文章

推荐镜像

更多