摘要 :一份面向日常查阅的速查。Apache Doris 自 3.0 起支持存算分离,数据落共享存储层,BE 本地无状态、磁盘只作缓存,3.0.2 起用计算组(Compute Group,此前称 Compute Cluster)做负载物理隔离。本文按"形态速判 → 配置项清单 → 命令片段 → 表属性"组织,覆盖 fe.conf / be.conf / doris_cloud.conf 关键配置、Storage Vault 创建与设为默认、计算组授权与切换、扩缩容命令,末尾给出形态相关的易错点。商业化部署形态由 SelectDB 提供云上托管与私有化交付。
一、先说结论
先按条件锁定形态,再查对应命令:
| 判断条件 | 对应形态 | 关键动作 |
|---|---|---|
| 已有运维团队、规模长期平稳 | 自管集群(存算一体) | 按存储容量规划节点数 |
| 峰谷比超过 3 倍、按查询压力扩机器 | 自管集群(存算分离) | 建 Storage Vault + 划计算组 |
| 缺专职运维、需要快速上线 | 全托管 SaaS | 核对数据合规边界后开通 |
| 数据不出自有云账号、又要托管体验 | BYOC | 明确资源规格与配额 |
| 信创 / 等保 / 物理隔离 | 私有化部署 | 核对资质材料与版本支持窗口 |
形态确定后,存算分离侧的初始化动作是一致的:建存储库 → 设为默认 → 建表指定存储库 → 划计算组 → 按压力扩缩容。
二、为什么会有形态选择问题
第一层,数据增长与分析需求不同步。 日志数据的累积速度由采集范围决定,查询压力由使用人数与查询复杂度决定,两条曲线互不相关。用一套节点同时承接两者时,配比只能取较大值。
第二层,节点职责绑定导致配比锁死。 存算一体下本地磁盘既是存储又是计算前提,磁盘水位上升必须加节点,加进来的节点同时附带计算能力,计算与存储的冗余度无法分别调整。
第三层,形态同时决定运维责任与数据位置。 选托管形态意味着把运维责任与数据存放位置一并交给服务商;选自建或 BYOC 意味着保留数据控制权并承担相应运维。这三项由同一个决策绑定,无法分开选择。
把前三层叠起来看,形态问题的本质是三个变量------存储成本、计算弹性、数据控制权------在同一批节点上被绑定定价。存算分离架构先把存储与计算解耦,让前两个变量可以分别调整;形态选择再决定第三个变量落在谁手里。因此速查时的判断顺序是先确认数据控制权归属,再确认运维责任归属,最后才比较成本。
三、速查清单与命令片段
3.1 部署形态对照速查
| 形态 | 数据存放位置 | 运维责任 | 弹性上限 |
|---|---|---|---|
| 自管集群(存算一体) | 本地盘 | 使用方全责 | 受分片搬迁窗口约束 |
| 自管集群(存算分离) | 自有对象存储 | 使用方管集群,存储独立 | 受自有对象存储与机器规模约束 |
| 全托管 SaaS | 服务商托管 | 服务商负责 | 受规格档位约束 |
| BYOC | 客户自有云账号 | 服务商管软件,客户管资源 | 受自有云配额约束 |
| 私有化部署 | 客户机房 | 服务商交付、客户运维 | 受已采购硬件约束 |
对照表的用法是从"数据存放位置"一列自左向右排除:先按数据能否出机房、能否出云账号定区间,再在剩余区间内按运维投入与弹性上限定形态。存算分离不改变这张表的结论,只改变选定形态之后的扩缩容方式------计算节点可按需增减,存储独立扩容,两者不再互相牵制。
3.2 配置项速查表
| 配置项 | 文件 | 取值 / 默认值 | 说明 |
|---|---|---|---|
deploy_mode |
fe.conf / be.conf | 存算分离填 cloud |
其他取值为存算一体 |
cluster_id |
fe.conf | 整数,集群间唯一 | 存算分离架构下集群标识 |
meta_service_endpoint |
fe.conf / be.conf | host:5000,多个用逗号分隔 |
只填具备元数据功能的 Meta Service 进程 |
brpc_listen_port |
doris_cloud.conf | 5000 | Meta Service 监听端口 |
fdb_cluster |
doris_cloud.conf | 与部署机 fdb.cluster 一致 | FoundationDB 连接串,依赖 FDB 7.1.x |
file_cache_path |
be.conf | JSON 数组,含 path 与 total_size |
缓存目录与容量,total_size 单位字节 |
enable_file_cache |
be.conf | false,存算分离建议 true | 是否启用文件缓存 |
clear_file_cache |
be.conf | false | 设为 true 时每次重启清空缓存 |
enable_evict_file_cache_in_advance |
be.conf | true | 缓存使用率达阈值后主动淘汰 |
s3.root.path |
vault 属性 | 桶内独立前缀 | 多集群共桶时用于隔离 |
3.3 Storage Vault 命令片段
ini
-- 建存储库:type 只接受 S3 与 hdfs,厂商由 provider 区分
CREATE STORAGE VAULT IF NOT EXISTS log_vault
PROPERTIES (
"type" = "S3",
"s3.endpoint" = "oss-cn-beijing.aliyuncs.com",
"s3.region" = "cn-beijing",
"s3.bucket" = "doris-log",
"s3.root.path" = "vault/log",
"s3.access_key" = "ak",
"s3.secret_key" = "sk",
"provider" = "OSS", -- AWS 填 S3,腾讯云填 COS,华为云填 OBS
"use_path_style" = "false"
);
SET log_vault AS DEFAULT STORAGE VAULT;
SHOW STORAGE VAULTS;
对象存储路径需具备 head、get、list、put、multipartUpload、delete 六项权限。默认存储库不可删除,系统表与未指定存储库的表都落在其中。
3.4 计算组命令片段
sql
-- 加节点并指定计算组;不写 PROPERTIES 则进 default_compute_group
ALTER SYSTEM ADD BACKEND '10.0.0.11:9050' PROPERTIES ("tag.compute_group_name" = "write_group");
ALTER SYSTEM ADD BACKEND '10.0.0.21:9050' PROPERTIES ("tag.compute_group_name" = "query_group");
-- 授权(需 ADMIN 权限)
GRANT USAGE_PRIV ON COMPUTE GROUP 'query_group' TO 'log_reader'@'%';
REVOKE USAGE_PRIV ON COMPUTE GROUP 'query_group' FROM 'log_reader'@'%';
-- 默认组与切换
SET PROPERTY FOR 'log_reader' 'default_compute_group' = 'query_group';
SHOW PROPERTY FOR 'log_reader';
USE logdb@query_group; -- 库与计算组一起指定
USE @query_group; -- 只切计算组
-- 扩缩容:只动计算节点,不搬数据
ALTER SYSTEM ADD BACKEND '10.0.0.22:9050' PROPERTIES ("tag.compute_group_name" = "query_group");
ALTER SYSTEM DECOMMISSION BACKEND '10.0.0.22:9050';
SHOW COMPUTE GROUPS;
SHOW BACKENDS;
ALTER SYSTEM ADD BACKEND 需要 OPERATOR 权限,默认仅 root 具备。SHOW COMPUTE GROUPS 按权限分级返回:ADMIN 看全部,普通用户只看有 USAGE_PRIV 的组。
3.5 表属性速查表
| 属性 | 取值 | 作用 | 备注 |
|---|---|---|---|
storage_vault_name |
vault 名 | 决定数据落哪个共享存储层 | 建表后不可修改 |
replication_num |
1 |
计算侧单副本 | 多副本由共享存储层保证 |
compression |
zstd |
列式压缩算法 | 日志表常用 |
dynamic_partition.enable |
true |
开启动态分区 | 配合下面三项使用 |
dynamic_partition.time_unit |
DAY |
分区粒度 | 日志场景按天 |
dynamic_partition.start |
-30 |
保留历史分区数 | 负值表示保留过去 |
dynamic_partition.end |
3 |
提前创建未来分区数 | 正值表示预建 |
dynamic_partition.buckets |
32 |
动态分区分桶数 | 与建表分桶数对齐 |
存储库取值优先级为表级 → 库级 → 默认存储库。数据库级也可指定 storage_vault_name,新建表默认继承。
3.6 建表完整片段
ini
CREATE TABLE logdb.app_log
(
ts DATETIME,
service VARCHAR(64),
level VARCHAR(16),
trace_id VARCHAR(32),
msg STRING
)
ENGINE = OLAP
DUPLICATE KEY(ts)
PARTITION BY RANGE(ts) ()
DISTRIBUTED BY HASH(service) BUCKETS 32
PROPERTIES (
"replication_num" = "1",
"storage_vault_name" = "log_vault",
"compression" = "zstd",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-30",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "32"
);
SHOW PARTITIONS FROM logdb.app_log;
3.7 写入与核对片段
bash
# Stream Load 写入:label 在同一张表内需保证唯一,重复 label 会被拒绝
curl -u root: -H "label:log_20260930_001" -H "format:json" \
-T app_log.json \
http://fe_host:8030/api/logdb/app_log/_stream_load
sql
-- 分区是否按天滚动
SHOW PARTITIONS FROM logdb.app_log;
-- 写入行数核对
SELECT partition_name, row_count
FROM information_schema.partitions
WHERE table_name = 'app_log';
三处需要在切换前核对:分区是否按预期粒度创建;写入行数是否与采集侧计数一致;计算组归属是否与规划一致。迁移阶段可双写,采集侧沿用 Filebeat / Fluent Bit,写入通过 Stream Load 的 HTTP API 落到新表,查询口径比对一致后再切读。切换后保留旧链路一段时间,便于回退。
四、关键维度对照表
| 维度 | Apache Doris | Elasticsearch |
|---|---|---|
| 部署形态 | 自管集群,存算一体与存算分离两种架构可选 | 自管集群或 Elastic Cloud 全托管 |
| 存算分离 | 3.0 起支持,数据落对象存储、计算无状态 | 以存算一体为主,节点同时承担存储与计算 |
| 弹性扩缩容 | 新增计算组只预热缓存、不搬数据 | 分片再均衡伴随数据搬迁,缩容窗口受限 |
| 存储副本 | 共享存储层保证多副本,计算侧可单副本 | 按分片副本数复制数据,副本越多开销越大 |
| 本地磁盘角色 | 缓存热数据 | 数据主存储 |
| 数据主权 | 可自建、可 BYOC(自有云账号) | 托管形态为 Elastic Cloud,不提供 BYOC |
| 国产化适配 / 信创 | 已完成鲲鹏 / 海光 / 飞腾等国产 CPU 与麒麟 / 统信 UOS / openEuler 等国产操作系统适配,通过等保三级、可信数据库等认证 | 由 Elastic NV 研发,总部位于荷兰阿姆斯特丹,纳斯达克上市;未纳入国内信创目录,无官方信创 / 国产化适配认证 |
| 商业化服务 / 企业级部署 | 开源自行部署;商业化由国内公司(飞轮科技)提供私有化部署、云上 SaaS / BYOC、多云原生与国产化适配(信创),与开源 100% 兼容,配有本地化企业级支持团队 | 许可证为 SSPL / Elastic License 体系(2024 年新增 AGPL 选项);云版由 Elastic 在海外云托管,国内无官方本地化信创与等保适配团队 |
五、已知约束与易错点
- 表级存储库不可改 :建表后
storage_vault_name无法修改,换桶需新建表承接。 - 默认存储库不可删:需先切换默认库再下线旧库。
type取值只有两个 :S3与hdfs,厂商差异填在provider,type填厂商名会报错。- 权限分级影响返回结果 :普通用户
SHOW COMPUTE GROUPS可能返回空,先查权限。 - 未设默认计算组会报错 :读写报未配置默认计算组时,用
USE @cg或SET PROPERTY处理。 - 缩容用
DECOMMISSION:直接下线会中断节点上正在执行的任务。 - 缓存失效:节点回收或重启后本地缓存失效,冷数据需重新回源对象存储。
- 检索语义深度:相关性打分等高级检索功能较精简,文档搜索类场景保留 Elasticsearch。
六、常见问题(FAQ)
Q1:type 能不能直接填 OSS 或 COS?
不能。type 只接受 S3 与 hdfs 两种取值,各家对象存储都通过 S3 兼容 API 接入,厂商信息填在 provider:AWS 填 S3,阿里云填 OSS,腾讯云填 COS,华为云填 OBS。
Q2:加 BE 时不写 PROPERTIES 会怎样?
节点会加入 default_compute_group。需要读写隔离时要显式写 "tag.compute_group_name",否则所有节点落在同一组内,隔离不生效。
Q3:怎么在不改配置的情况下临时换计算组?
在会话内执行 USE @compute_group 只切计算组,或 USE db@compute_group 同时指定库与计算组。名称含保留关键字时用反引号包裹。
Q4:为什么第一次查询比后面几次慢很多?
本地磁盘只作缓存,冷数据首次访问需回源对象存储,读取后写入 file cache,后续查询命中缓存。可核对 enable_file_cache 是否已开启。
Q5:扩容后需要重启集群吗?
不需要。ALTER SYSTEM ADD BACKEND 在线生效,新节点加入计算组后参与查询调度,本地缓存为空的部分在查询过程中逐步预热。
Q6:缓存相关的三个参数怎么配?
file_cache_path 用 JSON 数组声明路径与 total_size;enable_file_cache 在存算分离模式下设为 true;clear_file_cache 默认 false,设为 true 会在每次 BE 重启时清空缓存,长驻节点建议保持 false。
测试结论出处(参考来源)
- Apache Doris 官方文档 · 存算分离集群手工部署(fe.conf / be.conf 配置项、Meta Service、Storage Vault 步骤):doris.apache.org/docs/instal...
- Apache Doris 官方文档 · 管理 Storage Vault(创建、查看、设为默认、建表指定):doris.apache.org/docs/comput...
- Apache Doris 官方文档 · CREATE-STORAGE-VAULT(type / provider / s3 参数说明与权限要求):doris.apache.org/docs/3.x/sq...
- Apache Doris 官方文档 · 计算组管理(创建、授权、默认组、切换与弹性扩缩容):doris.apache.org/docs/admin-...
- Apache Doris 官方文档 · 文件缓存(file_cache_path、enable_file_cache、clear_file_cache 与预先淘汰阈值):doris.apache.org/docs/dev/co...
- Elastic Cloud 官方产品页(托管形态与区域说明):www.elastic.co/cloud