Apache Doris
原本打算是系统了解一下 StarRocks 的,但是不经意间看到了这篇文章——你们想知道的一切,都在这里了,对 StarRocks 先有了个不好的印象,因此本文内容将围绕 Apache Doris 展开。
简介
Apache Doris(后文简称 Doris)是一款基于 MPP(大规模并行处理)架构的高性能、实时分析型数据库,它能够较好的满足报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建大屏看板、用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

由上图可以看到,Apache Doris 主要应用于以下场景:
-
报表服务与即席查询:Doris 提供多维数据分析能力,为企业内部的报表、面相分析是的即系报表查询,面相用户的高并发报表提供稳定高性能服务支撑;
-
实时数仓分析:Doris 可以应用于实时数据处理与分析场景,提供秒级同步 TP 数据库的数据变更及亚秒级数据查询能力,服务于实时大屏、实时风控、实时订单分析、实时广告主报表等场景;
-
湖仓一体统一分析:Doris 外表联邦分析位于 Hive、Iceberg、Hudi 等离线湖仓中的数据,在避免数据拷贝的前提下,查询性能大幅提升;
-
用户画像与行为分析:利用 Doris 内置的行为分析函数与 bitmap 类型可以支撑用户行为分析与画像圈人场景,可以提供高效的查询与实时分析能力,帮助企业快速获取用户洞察,优化用户体验和企业决策;
-
日志检索与分析:Doris 支持倒排索引和全文检索,能够很好的满足日志检索分析的场景,并且依赖其高效的查询引擎和存储引擎,相比传统的日志检索分析的方案可以有 10 倍性价比的优势。
整体架构
Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris,并支持与 BI 工具的无缝对接。自 3.0 版本开始,Doris 支持用户自行选择存算一体和存算分离两种不同的架构。
“存”是指数据的存储,“算”则是指计算或处理这些数据的能力。
存算一体
在存算一体(也称为紧耦合)架构中,计算节点和存储节点是紧密结合在一起的。这意味着每个节点既负责数据的存储也负责对这些数据进行计算。这种架构的优点包括:
-
低延迟:由于计算和存储是在同一个节点上完成的,减少了数据传输的网络开销,因此查询响应速度较快。
-
简化管理:因为计算和存储资源是在同一组硬件上运行,所以部署和维护相对简单。
存算分离
存算分离(也称为松耦合)架构则将计算和存储功能分离开来,使得计算层和存储层可以独立地进行优化、扩展和升级。在 Apache Doris 3.0 版本之后,它引入了这样的架构,带来了以下优势:
-
灵活扩展:可以根据需要单独扩展计算资源或者存储资源,提高了资源利用效率。
-
高可用性:即使某个计算节点失效,也不会影响到其他计算节点的数据访问;同样,存储层的设计也可以确保即使某些存储节点出现问题,整体系统的数据仍然可访问。
-
成本效益:能够根据实际需求选择不同性能等级的硬件用于计算和存储,从而降低总体拥有成本。
-
性能优化:计算层专注于执行查询计划和结果返回,而存储层专注于高效的数据管理和读写操作,各自专注于最擅长的任务,从而提高整个系统的性能。
在存算分离架构下,计算层和存储层之间的交互通常通过高效的网络协议来实现,并且存储层可能会采用分布式文件系统或者其他形式的分布式存储解决方案,以保证大规模数据集的可靠性和性能。
功能特点
-
高可用:在 Apache Doris 中,元数据和数据均采用多副本存储,通过 quorum 协议同步数据日志。当大多数副本完成写入后,即认定数据写入成功,从而确保即使少数节点发生故障,集群仍能保持可用性。Apache Doris 支持同城和异地容灾,能够实现双集群主备模式。当部分节点发生异常时,集群可以自动隔离故障节点,避免影响整体集群的可用性。
-
高兼容:Apache Doris 高度兼容 MySQL 协议,支持标准 SQL 语法,涵盖绝大部分 MySQL 和 Hive 函数。通过这种高兼容性,用户可以无缝地迁移和集成现有的应用和工具。Apache Doris 支持 MySQL 生态,用户可以通过 MySQL Client 工具链接 Doris,使得操作和维护更加便捷,也可以使用 MySQL 协议对 BI 报表工具与数据传输工具进行兼容适配,确保数据分析和数据传输过程中的高效性和稳定性;
-
实时数仓:基于 Apache Doris 可以构建实时数据仓库服务。Apache Doris 提供了秒级数入库能力,上游在线联机事务库中的增量变更可以秒级捕获到 Doris 中,依靠向量化引擎、MPP 架构及 Pipeline 执行引擎等加速手段可以提供亚秒级数据查询能力,从而构建高性能低延迟的实时数仓平台;
-
湖仓一体:Apache 可以基于外部数据源,如数据湖或关系型数据库构建湖仓一体的架构。Apache Doris 湖仓一体解决了数据能够在数据湖和数据仓库之间进行无缝的集成和自由的流转,从而帮助用户直接利用数据仓库的能力来解决数据湖中的数据分析问题,同时又能充分利用数据湖的数据管理能力来提升数据的价值;
-
灵活建模:Apache Doris 提供多种建模方式,如宽表模型、预聚合模型、星型/雪花模型等。数据导入时,可以通过 Flink、Spark 等计算引擎将数据打平成宽表写入到 Doris 中,也可以将数据直接导入到 Doris 中,通过视图、物化视图或实时多表关联等方式进行数据的建模操作。
安装部署
下载解压二进制包:
wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-3.0.3-bin-x64.tar.gz
tar -zxvf apache-doris-3.0.3-bin-x64.tar.gz
mv apache-doris-3.0.3-bin-x64 apache-doris
配置 FE(apache-doris/fe/conf/fe.conf):
# 增加 JAVA_HOME 配置,指向 JDK8 的运行环境。假如我们 JDK8 位于 /home/doris/jdk8, 则设置如下
JAVA_HOME=/home/doris/jdk8
# FE 监听 IP 的 CIDR 网段。默认设置为空,有 Apache Doris 启动时自动选择一个可用网段。如有多个网段,需要指定一个网段,可以类似设置 priority_networks=192.168.0.0/24
# priority_networks =
# FE 元数据存放的目录,默认是在 DORIS_HOME 下的 doris-meta 目录。已经创建,可以更改为你的元数据存储路径。
# meta_dir = ${DORIS_HOME}/doris-meta
单节点启动 FE:
./fe/bin/start_fe.sh --daemon
配置 BE(apache-doris/be/conf/be.conf):
# 增加 JAVA_HOME 配置,指向 JDK8 的运行环境。假如我们 JDK8 位于 /home/doris/jdk8, 则设置如下
JAVA_HOME=/home/doris/jdk8
# BE 监听 IP 的 CIDR 网段。默认设置为空,有 Apache Doris 启动时自动选择一个可用网段。如有多个网段,需要指定一个网段,可以类似设置 priority_networks=192.168.0.0/24
# priority_networks =
# BE 数据存放的目录,默认是在 DORIS_HOME 下的 storage 下,默认已经创建,可以更改为你的数据存储路径
# storage_root_path = ${DORIS_HOME}/storage
单节点启动 BE:
./be/bin/start_be.sh --daemon
将 BE 节点添加到集群:
ALTER SYSTEM ADD BACKEND "be_host_ip:heartbeat_service_port";
修改管理员用户密码:
mysql> SET PASSWORD FOR 'root' = PASSWORD('doris-root-password');
Query OK, 0 rows affected (0.01 sec)
mysql> SET PASSWORD FOR 'admin' = PASSWORD('doris-admin-password');
Query OK, 0 rows affected (0.00 sec)
参考
著作権声明
本記事のリンク:https://www.chinmoku.cc/dev/java/database/apache-doris/
本博客中的所有内容,包括但不限于文字、图片、音频、视频、图表和其他可视化材料,均受版权法保护。未经本博客所有者书面授权许可,禁止在任何媒体、网站、社交平台或其他渠道上复制、传播、修改、发布、展示或以任何其他方式使用此博客中的任何内容。