☰
Doris配置全解析:从FE到Broker一站式指南
2026/10/14 17:19:25 网站建设 项目流程

下面把之前两篇内容整合成一份完整的Doris 配置与 Broker 详解,按“全局认知 → FE → BE → Broker → 扩缩容 → 系统层 → 端口 → 总结”的顺序展开。每个配置点尽量讲清楚:是什么、为什么、怎么配、怎么验证、避坑。


Doris 配置与 Broker 详解

一、全局认知:Doris 配置分 5 层

Doris 的“配置”不只是改fe.conf、be.conf,而是多层配合:

层级配置方式作用
系统环境层limits.conf、Swap、时钟、Docker、内核保证进程能跑、稳定、低延迟
节点静态配置文件fe.conf、be.conf、broker.conf指定元数据/数据目录、IP、端口、JVM 等
启动参数层start_fe.sh、start_be.sh、start_broker.sh控制启动方式、首次加入集群、守护进程
集群元数据层MySQL 协议执行 SQL把 BE、FE、Broker 加入集群,扩缩容
客户端访问层MySQL Client / JDBC / ODBC通过 9030 端口访问 Doris

一句话:配置就是告诉 Doris:我是谁、我在哪、数据放哪、怎么通信、能占多少资源、集群里有哪些节点。


二、FE 配置(fe.conf):集群的“大脑”

FE(Frontend)是 Doris 的管理节点,负责接收查询请求、解析 SQL、生成执行计划、管理元数据。所有库表、分区、副本的信息都保存在 FE 的元数据中。

1. meta_dir — 元数据存储路径

是什么:FE 元数据的存储目录,包含所有库、表、分区、副本、事务等核心信息。

为什么要配:

  • 元数据是集群的“户口本”,一旦丢失,整个集群无法工作。
  • 默认放在 Doris 安装目录下,生产和安装目录混用有风险。
  • 生产环境建议使用独立磁盘,最好是 SSD,因为元数据的读写非常频繁。

怎么配:

meta_dir = /data/doris-meta

创建目录后,可以通过软链接指向默认的doris-meta目录:

mkdir -p /data/doris-meta ln -s /data/doris-meta /opt/doris/fe/doris-meta

怎么验证:启动 FE 后,检查/data/doris-meta目录下是否生成了image、bdbje等子目录。如果启动失败,查看log/fe.log或log/fe.out。

避坑:不要放在 Doris 安装目录下,不要用网络挂载盘(NFS),不要和 BE 数据目录共用磁盘。


2. priority_networks — 网络 IP 绑定

是什么:告诉 FE 使用哪个网段的 IP 来标识自己。值是 CIDR 格式,如192.168.1.0/24。

为什么要配:

  • 机器可能有多个网卡(内网、外网、Docker、虚拟机)。
  • 不配的话,FE 可能自动选择一个错误的 IP,导致 BE 注册到错误的 IP、FE 之间无法通信。
  • 建议任何情况下都显式设置该参数,避免后续机器增加新网卡导致 IP 选择不正确。

怎么配:

priority_networks = 192.168.8.0/24

每台机器根据自己的实际网段修改。

怎么验证:启动后连接 FE,执行SHOW FRONTENDS;,查看返回的 IP 是否是你期望的 IP。


3. JAVA_OPTS — JVM 堆内存

是什么:控制 FE Java 进程的最大堆内存(-Xmx)和初始堆内存(-Xms)。

为什么要配:

  • FE 默认最大堆内存只有 4GB,生产环境远远不够。
  • 元数据量大时,内存不足会导致 OOM(内存溢出),FE 直接崩溃。
  • 生产环境建议16GB 以上。

怎么配:

JAVA_OPTS="-Xmx16384m -Xms16384m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

怎么验证:启动 FE 后,执行jps找到 FE 进程,用jstat -gc <pid>查看堆内存使用情况。或者查看fe.gc.log。


4. 其他 FE 配置项

配置项默认值作用注意事项
http_port8030FE Web UI 端口多 FE 部署时,所有 FE 的该端口必须相同
rpc_port9020FE Thrift Server 端口BE 通过此端口访问 FE
query_port9030MySQL 协议端口用户通过此端口连接 Doris
edit_log_port9010FE 之间 BDBJE 通信端口添加 Follower/Observer 时使用

怎么验证:访问http://<fe_ip>:8030可以看到 FE 的 Web UI,默认用户root,密码为空。


三、BE 配置(be.conf):数据的“仓库”与“计算器”

BE(Backend)负责实际数据的存储和查询计算。数据按分片(Tablet)存储在 BE 上,默认 3 副本。

1. storage_root_path — 数据存储路径

是什么:BE 存储用户数据的目录。可以配置多个路径,实现多磁盘并行 IO。

为什么要配:

  • 默认路径在be/storage下,需要手动创建,且空间可能不够。
  • 多块磁盘配多个路径可以提升读写速度(并行 IO)。
  • 可以区分 SSD 和 HDD,实现冷热数据分层存储:热数据放 SSD,冷数据放 HDD。

怎么配:

# 基础写法:多个路径用英文分号分隔,最后一个目录后不要加分号 storage_root_path = /data1/doris;/data2/doris
# 高级写法:指定介质类型和容量限制 storage_root_path = /home/disk1/doris,medium:SSD,capacity:500;/home/disk2/doris,medium:HDD,capacity:2000
  • medium:SSD或medium:HDD:指定磁盘介质
  • capacity:500:限制该路径最大使用 500GB
  • 不写medium默认为 HDD

怎么验证:

SHOW BACKEND CONFIG LIKE '%storage_root_path%';

或访问http://<be_ip>:8040/varz查看。

避坑:最后一个目录后不要加分号;多个路径用英文分号;,不是逗号;目录必须提前创建。


2. priority_networks — BE 的 IP 绑定

和 FE 的priority_networks作用相同,但绑定的是 BE 自己的 IP。每台 BE 机器都要配成自己的 IP。

3. BE 端口配置

端口名默认值作用通信方向
be_port9060Thrift Server,接收 FE 请求FE → BE
webserver_port8040HTTP ServerBE ↔ BE
heartbeat_service_port9050心跳端口,FE 检测 BE 存活FE → BE
brpc_port8060BE 之间通信(副本同步、数据均衡)FE ↔ BE,BE ↔ BE

为什么heartbeat_service_port是 9050:FE 通过这个端口给 BE 发心跳,如果 BE 在 3 次心跳内没有响应,FE 会认为 BE 已经宕机。添加 BE 节点时必须使用这个端口:

ALTER SYSTEM ADD BACKEND "be_host:9050";

四、Broker 详解:访问外部数据的“桥梁”

1. Broker 是什么

Broker 是一个独立的、无状态的 Java 进程,它封装了各种文件系统的接口,为 Doris 提供读写远端存储系统(如 HDFS、S3、OSS 等)文件的能力。Broker 通过一个 RPC 服务端口提供服务,内部封装了类 POSIX 的文件操作,如open、pread、pwrite等。

2. 为什么需要 Broker

Doris 的数据最终存储在 BE 的本地磁盘上。但实际业务中,原始数据往往在外部存储系统中:HDFS 上的 Hive 数仓表、S3/OSS 对象存储中的日志文件、BOS 上的备份数据等。BE 本身并不擅长直接读写这些外部系统的文件,Broker 就是为解决这个问题而生的。

3. Broker 的核心特征

特征说明
无状态不记录任何持久化信息,所有连接信息、文件信息、权限信息都在 RPC 调用时通过参数传递
不参与计算仅作为数据通路,内存占用极少
可分组相同类型的 Broker 组成一个组,设定一个名称(Broker Name),用户通过WITH BROKER "broker_name"指定
可多实例部署通常每台物理机部署一个 Broker 进程

4. 支持的存储系统

Broker 目前已支持以下远端存储:

  • Apache HDFS
  • 阿里云 OSS
  • 腾讯云 CHDFS / GFS
  • 华为云 OBS
  • 亚马逊 S3
  • JuiceFS(2.0.0 版本支持)

5. Broker 的三大使用场景

场景一:Broker Load — 异步数据导入
从外部存储系统导入大规模数据到 Doris 中。这是 Broker 最核心的使用场景。
适用场景:源数据在 HDFS、S3 等外部存储中,需要批量导入 Doris 进行分析。

场景二:Export — 异步数据导出
将 Doris 表中的数据导出到外部存储系统。

场景三:Select Into Outfile — 同步数据导出
将查询结果直接导出到外部存储。


6. Broker Load 详细用法

6.1 工作原理

Broker Load 是一个异步导入方式,通过 MySQL API 发起。执行流程如下:

  1. 用户在 MySQL 客户端提交LOAD语句
  2. FE 生成导入计划,将任务拆分为多个子任务分发给各 BE
  3. 每个 BE 通过 Broker 进程从远端存储拉取数据
  4. BE 对数据进行 ETL 处理后存储
  5. 用户通过SHOW LOAD查看进度和结果

重要提示:随着 Doris 版本优化,现在从 S3 和 HDFS 直接读取已不再依赖额外的 Broker 进程,但语法相似,统称为 Broker Load。

6.2 完整语法
LOAD LABEL [<db_name>.]<load_label> ( [ MERGE | APPEND | DELETE ] DATA INFILE ("<file_path>"[, ...]) [ NEGATIVE ] INTO TABLE `<table_name>` [ PARTITION (<partition_name> [, ...]) ] [ COLUMNS TERMINATED BY "<column_separator>" ] [ LINES TERMINATED BY "<line_delimiter>" ] [ FORMAT AS "<file_type>" ] [ COMPRESS_TYPE AS "<compress_type>" ] [ (<column_list>) ] [ COLUMNS FROM PATH AS (<column_name> [, ...]) ] [ SET (<column_mapping>) ] [ PRECEDING FILTER <predicate> ] [ WHERE <predicate> ] [ DELETE ON <expr> ] [ ORDER BY <source_sequence> ] [ PROPERTIES ("<key>"="<value>" [, ...]) ] ) WITH BROKER "<broker_name>" ( <broker_properties> [, ...] ) [ PROPERTIES (<load_properties> [, ...]) ] [COMMENT "<comment>"];
6.3 必选参数详解
参数说明示例
<load_label>导入任务的唯一标识,后续通过它查询进度broker_load_20240101
<file_path>源文件路径,支持通配符,必须匹配到具体文件hdfs://namenode:8020/data/*.csv
<table_name>目标 Doris 表lineorder_brokerload_u
<broker_name>使用的 Broker 名称,通过SHOW BROKER获取broker_192_168_0_221
<broker_properties>Broker 访问远端存储所需的认证信息"username"="user"
6.4 从 HDFS 导入完整示例(含 Kerberos 认证)
LOAD LABEL broker_load_ut ( DATA INFILE("hdfs://主NameNode实例IP地址:RPC端口号/user/hive/warehouse/wxk.db/lineorder_broker/*/*") INTO TABLE lineorder_brokerload_u FORMAT AS "orc" (LO_ORDERKEY, LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERDATE, LO_ORDERPRIORITY, LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, LO_REVENUE, LO_SUPPLYCOST, LO_COMMITDATE, LO_SHIPMODE, LO_TAX) ) WITH BROKER "broker_192_168_0_221" ( "hadoop.security.authentication" = "kerberos", "kerberos_principal" = "doris/hadoop.hadoop.com@HADOOP.COM", "kerberos_keytab" = "$(BIGDATA_HOME)/FusionInsight_Doris_*/install/FusionInsight-Doris-*/doris-fe/bin/doris.keytab" ) PROPERTIES ( "timeout" = "1200", "max_filter_ratio" = "0.1" );

关键参数说明:

  • kerberos_principal:访问 Hadoop 集群的 keytab 文件对应的 principal
  • kerberos_keytab:keytab 文件路径,需拷贝到所有 Broker 节点
  • timeout:导入超时时间,默认不超时,单位秒
  • max_filter_ratio:最大容忍可过滤数据的比例,默认零容忍
6.5 从 S3 导入示例
LOAD LABEL test_db.label1 ( DATA INFILE("s3://bucket_name/data.csv") INTO TABLE `test_tbl` COLUMNS TERMINATED BY "," FORMAT AS "csv" ) WITH BROKER "s3_broker" ( "aws.s3.access_key" = "your_access_key", "aws.s3.secret_key" = "your_secret_key", "aws.s3.region" = "us-west-2" ) PROPERTIES ( "timeout" = "3600", "max_filter_ratio" = "0.1" );
6.6 关键 PROPERTIES 参数
参数作用默认值
timeout导入操作超时时间(秒)不超时
max_filter_ratio最大容忍可过滤数据的比例0(零容忍)
load_deleted_rows用于 DELETE 操作-
strict_mode是否开启严格模式false
6.7 数据转换功能

Broker Load 支持在 SQL 语句中直接进行数据转换,包括:

  • PRECEDING FILTER:前置过滤,在读取阶段就过滤数据
  • WHERE:后置过滤
  • SET:列转换函数
  • COLUMNS FROM PATH AS:从文件路径中抽取列
6.8 查看导入结果
-- 查看最近一次导入任务 SHOW LOAD ORDER BY createtime DESC LIMIT 1\G; -- 查看目标表数据 SELECT * FROM lineorder_brokerload_u;

任务状态流转:PENDING → ETL → LOADING → FINISHED(或CANCELLED)。

7. Broker 的配置与部署

7.1 Broker 配置文件

Broker 的配置文件为apache_hdfs_broker.conf,关键配置项包括:

配置项默认值说明
broker_ipc_port8000Broker 的 RPC 服务端口
hdfs_read_buffer_size_kb1024HDFS 读缓冲区大小(KB)
hdfs_write_buffer_size_kb1024HDFS 写缓冲区大小(KB)
client_expire_seconds1800客户端连接过期时间
sys_log_dir$BROKER_HOME/log日志目录
sys_log_levelINFO日志级别

同时需要配置priority_networks来绑定正确的 IP。

7.2 部署步骤
# 1. 编译 Broker(进入 fs_brokers 目录) sh build.sh 2. 拷贝 output 目录到目标节点,改名为 apache_hdfs_broker cp -r output/apache_hdfs_broker /opt/module/apache-doris-0.15.0/ 3. 启动 Broker /opt/module/apache-doris-0.15.0/apache_hdfs_broker/bin/start_broker.sh --daemon
7.3 在 FE 中注册 Broker
ALTER SYSTEM ADD BROKER broker_name "hadoop1:8000","hadoop2:8000","hadoop3:8000";

其中broker_host为 Broker 所在节点 IP,broker_ipc_port为 Broker 配置文件中指定的端口(默认 8000)。

7.4 验证 Broker 状态
SHOW BROKER;

输出字段说明:

字段说明
NameBroker 进程名称
HostBroker 进程所在节点 IP
PortBroker 进程端口
AliveBroker 进程状态(true/false)
LastStartTime上次启动时间
ErrMsg上次启动失败的错误信息

8. Broker 数据导出

8.1 EXPORT 异步导出

将 Doris 表中的数据导出到外部存储:

EXPORT TABLE db1.tbl1 [PARTITION (p1, p2)] [WHERE <where_clause>] TO "hdfs://path/to/export" WITH BROKER "broker_name" ( "username" = "user", "password" = "pass" ) PROPERTIES ( "label" = "mylabel", "column_separator" = ",", "columns" = "col1, col2, col3" );

导出任务提交后立即返回,可通过SHOW EXPORT;查看进度。

8.2 SELECT INTO OUTFILE 同步导出

将查询结果直接导出到远端存储:

SELECT * FROM my_table INTO OUTFILE "hdfs://path/to/output" FORMAT AS CSV WITH BROKER "broker_name" ( "username" = "user", "password" = "pass" );

9. Broker Load 性能调优

9.1 并发策略

Broker Load 的并发由以下两个参数控制:

参数默认值说明
min_bytes_per_broker_scanner64MB单个 BE 处理数据量的最小值
max_bytes_per_broker_scanner3GB单个 BE 处理数据量的最大值
max_broker_concurrency10单个作业的最大并发导入任务数

单次导入并发数 =min(源文件大小 / min_bytes_per_broker_scanner, max_broker_concurrency)。

9.2 最佳实践
  • 文件拆分:对于压缩文件、Parquet、ORC 文件,建议将文件分割为多个小文件后导入,以提升并发度。
  • 分批导入:大数据量导入时,单批控制在 100GB 以内,分批进行。
  • 适用场景:Broker Load 最适合原始数据在文件系统(HDFS、BOS、AFS)中的场景,且是单次导入中唯一的异步导入方式。

10. Broker 常见问题与排障

10.1 导入超时

现象:Broker Load 导入数据时报超时错误。

解决方案:在 FE 的自定义配置中增加broker_timeout_ms参数,默认值为 10 秒,需适当调大(如 1000 秒),并重启配置过期的 FE 实例。

10.2 Broker 进程不存活

排查步骤:

  1. 执行SHOW BROKER;查看Alive字段
  2. 如果为 false,检查 Broker 进程是否启动:ps -ef | grep broker
  3. 检查 Broker 日志$BROKER_HOME/log/下的错误信息
  4. 检查priority_networks配置是否正确
10.3 权限认证失败

如果使用 Kerberos 认证,需要确保:

  • krb5.conf文件已正确配置在 Broker 节点
  • keytab 文件已拷贝到所有 Broker 节点并设置了正确的文件权限
  • kerberos_principal格式正确

六、端口速查表

下面汇总 FE、BE、Broker 三类的所有常用端口,方便在部署、排障和扩缩容时快速对照。

组件端口名默认值通信方向用途
FEhttp_port8030客户端 → FEFE Web UI 端口,多 FE 部署时所有 FE 该端口必须相同
rpc_port9020BE → FEFE Thrift Server 端口,BE 通过此端口访问 FE
query_port9030客户端 → FEMySQL 协议端口,用户通过此端口连接 Doris
edit_log_port9010FE ↔ FEFE 之间 BDBJE 通信端口,添加 Follower/Observer 时使用
BEbe_port9060FE → BEThrift Server,接收 FE 请求
webserver_port8040BE ↔ BEHTTP Server
heartbeat_service_port9050FE → BE心跳端口,FE 检测 BE 存活,添加 BE 节点时使用
brpc_port8060FE ↔ BE,BE ↔ BEBE 之间通信(副本同步、数据均衡)
Brokerbroker_ipc_port8000BE → BrokerBroker 的 RPC 服务端口,BE 通过它访问远端存储

五、扩容与缩容:为什么扩?怎么扩?

1. 为什么要扩容?

场景扩容方式原因
FE 读能力不足增加 Observer FEObserver 只读不参与选举,专门扩展查询能力
FE 高可用不足增加 Follower FEFollower 参与选举,3 个 Follower 可实现读写高可用
BE 存储或算力不足增加 BE 节点扩展存储容量和计算能力

2. FE 扩容:增加 Follower / Observer

前置准备:新 FE 节点需与现有 FE 保持相同的meta_dir、priority_networks、JAVA_OPTS等配置,并确保edit_log_port(默认 9010)可互通。

操作步骤:

  1. 在现有 FE 上执行ALTER SYSTEM ADD FOLLOWER或ALTER SYSTEM ADD OBSERVER注册新节点。
  2. 在新节点上启动 FE 进程,它会自动从已有 FE 同步元数据。
  3. 通过SHOW FRONTENDS;验证节点状态。

命令示例:

-- 增加 Follower(参与选举,用于读写高可用) ALTER SYSTEM ADD FOLLOWER "fe_host:9010"; -- 增加 Observer(只读,用于扩展查询能力) ALTER SYSTEM ADD OBSERVER "fe_host:9010";

验证方法:

SHOW FRONTENDS;

关注Role(Follower/Observer)、IsMaster、Alive字段。新节点Alive为 true 且Role正确即表示扩容成功。

注意事项:

  • Follower 数量建议为奇数(如 1、3、5),避免选举时出现脑裂。
  • Observer 不参与选举,数量可任意,但会占用元数据同步资源。
  • 新 FE 首次启动会全量拉取元数据,耗时取决于元数据大小,期间Alive可能为 false,属正常现象。

3. BE 扩容:增加 Backend 节点

前置准备:新 BE 节点需配置好storage_root_path、priority_networks、be_port(默认 9060)、heartbeat_service_port(默认 9050)等,并确保目录已创建。

操作步骤:

  1. 启动新 BE 进程。
  2. 在 FE 上执行ALTER SYSTEM ADD BACKEND注册新节点。
  3. 通过SHOW BACKENDS;验证节点状态。

命令示例:

ALTER SYSTEM ADD BACKEND "be_host:9050";

验证方法:

SHOW BACKENDS;

关注Alive、TabletNum、DataUsedCapacity字段。新节点Alive为 true 即表示注册成功,后续 FE 会自动将部分 Tablet 均衡到新节点。

注意事项:

  • 添加 BE 时使用heartbeat_service_port(9050),不是be_port(9060)。
  • 新 BE 加入后,数据均衡是异步进行的,可通过SHOW PROC '/cluster_balance'查看均衡进度。
  • 扩容期间建议避开业务高峰,避免数据迁移影响查询性能。

4. 缩容:DECOMMISSION 下线节点

为什么用 DECOMMISSION:直接停掉节点会导致其上的 Tablet 副本缺失,影响数据可用性。DECOMMISSION 会先将该节点上的数据迁移到其他节点,迁移完成后再安全下线。

操作步骤:

  1. 在 FE 上执行ALTER SYSTEM DECOMMISSION BACKEND标记下线。
  2. 等待数据迁移完成,节点上的 Tablet 数降为 0。
  3. 确认迁移完成后,再物理停止节点进程。

命令示例:

-- 下线 BE 节点 ALTER SYSTEM DECOMMISSION BACKEND "be_host:9050"; -- 下线 FE 节点(Follower/Observer) ALTER SYSTEM DROP FOLLOWER "fe_host:9010"; ALTER SYSTEM DROP OBSERVER "fe_host:9010";

验证方法:

SHOW BACKENDS; SHOW FRONTENDS;

下线 BE 后,SHOW BACKENDS中该节点TabletNum应逐渐降为 0,最终从列表中消失。下线 FE 后,SHOW FRONTENDS中不再显示该节点。

注意事项:

  • DECOMMISSION 是异步操作,数据迁移耗时取决于数据量,期间不要强制 kill 进程。
  • 下线 BE 前需确保集群有足够的剩余存储和副本数(默认 3 副本),否则迁移会失败。
  • 下线 Follower 前需保证剩余 Follower 数量为奇数,避免选举异常。
  • 缩容后建议执行SHOW PROC '/cluster_balance'确认集群均衡状态恢复正常。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询