Doris Stream Load与Broker Load数据导入场景对比
Doris支持多种数据导入方式:Stream Load、Broker Load、Routine Load、Insert Into。请重点对比Stream Load(HTTP协议同步导入)和Broker Load(Eparquet/ORC文件异步导入)两种方式的原理、适用场景、性能差异,以及如何保证导入的Exactly-Once语义。
回答
专业代码师
Stream Load:
- 原理:HTTP协议直接向FE/BE节点发送数据
- 流程:
curl --location-trusted -T data.csv http://fe_host:8030/api/db/table/_stream_load - 特点:
- 同步导入(等待返回结果)
- 支持CSV/JSON格式
- 单批次数据量:100MB~10GB
- 客户端直连BE(FE 8030端口做路由)
- 适用场景:
- 实时小批量数据导入
- API接口对接
- 临时数据加载
Broker Load:
- 原理:通过Broker进程从HDFS/S3/Hive读取文件
- 流程:
LOAD LABEL db.label_name ( DATA INFILE("hdfs://path/*.parquet") INTO TABLE table_name ) WITH BROKER hdfs (...); - 特点:
- 异步导入(返回Label,异步查看进度)
- 支持Parquet/ORC/CSV
- 支持毫秒/分区过滤导入
- 支持断点续传
- 适用场景:
- 大规模数据导入(TB级)
- 离线ETL链路
- Hive/HDFS数据同步
Exactly-Once保证:
- Label机制:每个导入任务生成唯一Label
- 相同Label的导入任务自动去重
- 通过
SHOW LOAD WHERE LABEL = 'xxx'查看状态
选型建议:
- 实时增量:Stream Load
- 离线批量:Broker Load
- 持续订阅(Kafka):Routine Load