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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 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 使用姿势方法以及经验建议,让大家在实践路上更轻松自在和信心满满!


相关实践学习
数据库实验室挑战任务-初级任务
本场景介绍如何开通属于你的免费云数据库,在RDS-MySQL中完成对学生成绩的详情查询,执行指定类型SQL。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
15天前
|
SQL 存储 Apache
Apache Doris 2.1.3 版本正式发布
Apache Doris 2.1.3 版本正式发布!该版本在功能特性上对数据湖、物化视图、负载管理等方面进行了多项更新,进一步简化湖仓一体架构、加速了查询性能。 欢迎大家下载体验~
|
21天前
|
SQL 存储 调度
从 Volcano 火山模型到 Pipeline 执行模型,阿里云数据库 SelectDB 内核 Apache Doris 执行模型的迭代
一个合适的执行模型对于提高查询效率和系统性能至关重要。本文全面剖析 Apache Doris Pipeline 执行模型的设计与改造历程,并在 2.1 版本对并发执行模式与调度模式进一步优化,解决了执行并发受限、执行及调度开销大等问题。
从 Volcano 火山模型到 Pipeline 执行模型,阿里云数据库 SelectDB 内核 Apache Doris 执行模型的迭代
|
6天前
|
存储 运维 5G
基于阿里云数据库 SelectDB 内核 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案
数据是 5G 全连接工厂的核心要素,为支持全方位的数据收集、存储、分析等工作的高效进行,联通 5G 全连接工厂从典型的 Lambda 架构演进为 All in [Apache Doris](https://c.d4t.cn/vwDf8R) 的实时/离线一体化架构,并凭借 Doris 联邦查询能力打造统一查询网关,数据处理及查询链路大幅简化,为联通 5G 全连接工厂带来数据时效性、查询响应、存储成本、开发效率全方位的提升。
基于阿里云数据库 SelectDB 内核 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案
|
9天前
|
OLAP 数据处理 Apache
众安保险 CDP 平台:借助阿里云数据库 SelectDB 版内核 Apache Doris 打破数据孤岛,人群圈选提速4倍
众安保险在CDP(Customer Data Platform,客户数据平台)建设中,通过引入阿里云数据库SelectDB版内核Apache Doris,成功打破了数据孤岛,并显著提升了人群圈选的速度
172 1
|
10天前
|
运维 Cloud Native Apache
云计算新宠:探索Apache Doris的云原生策略
云计算新宠:探索Apache Doris的云原生策略
|
13天前
|
消息中间件 JSON Kafka
AutoMQ 生态集成 Apache Doris
Apache Doris 是一个高性能的分析型数据库,以其亚秒级查询响应和对复杂分析的支持而知名。它适合报表分析、即席查询等场景,能从 AutoMQ 通过 Routine Load 导入 Kafka 主题数据。本文详述了如何配置 Doris 环境,创建测试数据,以及设置 Routine Load 作业从 AutoMQ 导入 JSON 数据到 Doris 表的过程。最后,文中展示了验证数据成功导入的方法。Apache Doris 提供了低成本、高弹性的数据处理解决方案,其团队由 Apache RocketMQ 和 Linux LVS 的核心成员组成。
31 0
|
21天前
|
消息中间件 SQL Kafka
实时计算 Flink版产品使用合集之构建实时数据仓库时,如何操作在几分钟内一直变化的表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
21天前
|
应用服务中间件 网络安全 Apache
构建高性能Web服务器:Nginx vs Apache
【5月更文挑战第16天】Nginx与Apache是两种主流Web服务器,各具优势。Nginx以其轻量级、高并发处理能力和反向代理功能见长,适合大型网站和高并发场景;而Apache以功能丰富、稳定性强闻名,适合企业网站和需要多种Web服务功能的场景。在性能上,Nginx处理高并发更优,Apache则可能在高负载时遭遇瓶颈。在选择时,应根据实际需求权衡。
|
14天前
|
消息中间件 Java Kafka
实时计算 Flink版操作报错之Apache Flink中的SplitFetcher线程在读取数据时遇到了未预期的情况,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
7天前
|
数据处理 Apache 流计算

推荐镜像

更多