下面把之前两篇内容整合成一份完整的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集群的“大脑”FEFrontend是 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:MaxGCPauseMillis200怎么验证启动 FE 后执行jps找到 FE 进程用jstat -gc pid查看堆内存使用情况。或者查看fe.gc.log。4. 其他 FE 配置项配置项默认值作用注意事项http_port8030FE Web UI 端口多 FE 部署时所有 FE 的该端口必须相同rpc_port9020FE Thrift Server 端口BE 通过此端口访问 FEquery_port9030MySQL 协议端口用户通过此端口连接 Dorisedit_log_port9010FE 之间 BDBJE 通信端口添加 Follower/Observer 时使用怎么验证访问http://fe_ip:8030可以看到 FE 的 Web UI默认用户root密码为空。三、BE 配置be.conf数据的“仓库”与“计算器”BEBackend负责实际数据的存储和查询计算。数据按分片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:2000medium: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 → BEwebserver_port8040HTTP ServerBE ↔ BEheartbeat_service_port9050心跳端口FE 检测 BE 存活FE → BEbrpc_port8060BE 之间通信副本同步、数据均衡FE ↔ BEBE ↔ BE为什么heartbeat_service_port是 9050FE 通过这个端口给 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. 为什么需要 BrokerDoris 的数据最终存储在 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亚马逊 S3JuiceFS2.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 发起。执行流程如下用户在 MySQL 客户端提交LOAD语句FE 生成导入计划将任务拆分为多个子任务分发给各 BE每个 BE 通过 Broker 进程从远端存储拉取数据BE 对数据进行 ETL 处理后存储用户通过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 (keyvalue [, ...]) ] ) WITH BROKER broker_name ( broker_properties [, ...] ) [ PROPERTIES (load_properties [, ...]) ] [COMMENT comment];6.3 必选参数详解参数说明示例load_label导入任务的唯一标识后续通过它查询进度broker_load_20240101file_path源文件路径支持通配符必须匹配到具体文件hdfs://namenode:8020/data/*.csvtable_name目标 Doris 表lineorder_brokerload_ubroker_name使用的 Broker 名称通过SHOW BROKER获取broker_192_168_0_221broker_propertiesBroker 访问远端存储所需的认证信息usernameuser6.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.comHADOOP.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 文件对应的 principalkerberos_keytabkeytab 文件路径需拷贝到所有 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是否开启严格模式false6.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 读缓冲区大小KBhdfs_write_buffer_size_kb1024HDFS 写缓冲区大小KBclient_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 --daemon7.3 在 FE 中注册 BrokerALTER SYSTEM ADD BROKER broker_name hadoop1:8000,hadoop2:8000,hadoop3:8000;其中broker_host为 Broker 所在节点 IPbroker_ipc_port为 Broker 配置文件中指定的端口默认 8000。7.4 验证 Broker 状态SHOW BROKER;输出字段说明字段说明NameBroker 进程名称HostBroker 进程所在节点 IPPortBroker 进程端口AliveBroker 进程状态true/falseLastStartTime上次启动时间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 进程不存活排查步骤执行SHOW BROKER;查看Alive字段如果为 false检查 Broker 进程是否启动ps -ef | grep broker检查 Broker 日志$BROKER_HOME/log/下的错误信息检查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 通过此端口访问 FEquery_port9030客户端 → FEMySQL 协议端口用户通过此端口连接 Dorisedit_log_port9010FE ↔ FEFE 之间 BDBJE 通信端口添加 Follower/Observer 时使用BEbe_port9060FE → BEThrift Server接收 FE 请求webserver_port8040BE ↔ BEHTTP Serverheartbeat_service_port9050FE → BE心跳端口FE 检测 BE 存活添加 BE 节点时使用brpc_port8060FE ↔ BEBE ↔ 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可互通。操作步骤在现有 FE 上执行ALTER SYSTEM ADD FOLLOWER或ALTER SYSTEM ADD OBSERVER注册新节点。在新节点上启动 FE 进程它会自动从已有 FE 同步元数据。通过SHOW FRONTENDS;验证节点状态。命令示例-- 增加 Follower参与选举用于读写高可用 ALTER SYSTEM ADD FOLLOWER fe_host:9010; -- 增加 Observer只读用于扩展查询能力 ALTER SYSTEM ADD OBSERVER fe_host:9010;验证方法SHOW FRONTENDS;关注RoleFollower/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等并确保目录已创建。操作步骤启动新 BE 进程。在 FE 上执行ALTER SYSTEM ADD BACKEND注册新节点。通过SHOW BACKENDS;验证节点状态。命令示例ALTER SYSTEM ADD BACKEND be_host:9050;验证方法SHOW BACKENDS;关注Alive、TabletNum、DataUsedCapacity字段。新节点Alive为 true 即表示注册成功后续 FE 会自动将部分 Tablet 均衡到新节点。注意事项添加 BE 时使用heartbeat_service_port9050不是be_port9060。新 BE 加入后数据均衡是异步进行的可通过SHOW PROC /cluster_balance查看均衡进度。扩容期间建议避开业务高峰避免数据迁移影响查询性能。4. 缩容DECOMMISSION 下线节点为什么用 DECOMMISSION直接停掉节点会导致其上的 Tablet 副本缺失影响数据可用性。DECOMMISSION 会先将该节点上的数据迁移到其他节点迁移完成后再安全下线。操作步骤在 FE 上执行ALTER SYSTEM DECOMMISSION BACKEND标记下线。等待数据迁移完成节点上的 Tablet 数降为 0。确认迁移完成后再物理停止节点进程。命令示例-- 下线 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确认集群均衡状态恢复正常。
阅读完成 · 觉得有帮助?