5分钟掌握Apache Doris数据导入:Stream Load与Broker Load实战对比

5分钟掌握Apache Doris数据导入:Stream Load与Broker Load实战对比

【免费下载链接】doris Apache Doris is an easy-to-use, high performance and unified analytics database. 【免费下载链接】doris 项目地址: https://gitcode.com/gh_mirrors/dori/doris

你还在为数据导入速度慢、操作复杂而烦恼吗?作为一款高性能分析型数据库,Apache Doris提供了多种数据导入方式,但Stream Load和Broker Load因各自独特优势成为最常用的两种方案。本文将通过实战对比,帮你快速掌握两种导入方式的适用场景、操作步骤和性能特点,读完即可根据业务需求选择最优方案。

核心概念与架构 overview

Apache Doris采用MPP(大规模并行处理)架构,由Frontend(FE)和Backend(BE)两种进程组成,支持多种数据导入方式。其中Stream Load和Broker Load是处理实时和批量数据的核心方案。

Doris架构图

图1:Apache Doris架构示意图,展示了FE和BE的协作流程

两种导入方式定位

  • Stream Load:基于HTTP协议的同步导入方式,适用于实时性要求高的小批量数据
  • Broker Load:通过Broker进程访问外部存储的异步导入方式,适用于大批量离线数据

功能对比与适用场景

特性Stream LoadBroker Load
数据规模小批量(MB级)大批量(GB/TB级)
实时性同步(毫秒级响应)异步(分钟级延迟)
数据源本地文件/内存数据HDFS/S3等分布式存储
资源占用
适用场景实时日志、交易记录离线数据仓库同步
接口类型HTTP PUTSQL命令
重试机制需手动实现内置重试

典型应用场景

  • Stream Load:电商实时交易监控、用户行为追踪
  • Broker Load:每日销售报表生成、历史数据迁移

Stream Load实战指南

基本原理

Stream Load通过HTTP协议直接向BE节点发送数据,FE负责元数据校验和任务分配,BE完成数据写入。整个过程同步阻塞,返回明确的导入结果。

mermaid

图2:Stream Load工作流程图

操作步骤

  1. 创建目标表
CREATE TABLE `user_behavior` (
  `user_id` int,
  `action` string,
  `timestamp` datetime
) DUPLICATE KEY(`user_id`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 10
PROPERTIES ("replication_num" = "3");
  1. 执行数据导入 使用Python脚本实现Stream Load导入:
import requests
from requests.auth import HTTPBasicAuth

url = "http://be_host:8030/api/db0/user_behavior/_stream_load"
headers = {
    "Content-Type": "text/plain",
    "format": "csv",
    "column_separator": ","
}
data = "1001,click,2023-11-03 12:00:00\n1002,view,2023-11-03 12:01:00"

response = requests.put(
    url,
    headers=headers,
    data=data,
    auth=HTTPBasicAuth("root", "")
)

print(response.json())

代码示例:Stream Load Python实现

  1. 查看导入结果 成功响应包含详细的导入统计:
{
  "TxnId": 14017,
  "Status": "Success",
  "NumberTotalRows": 2,
  "NumberLoadedRows": 2,
  "LoadTimeMs": 54
}

Broker Load实战指南

基本原理

Broker Load通过Broker进程访问外部存储系统,采用异步执行模式。用户提交导入任务后,FE会在后台调度BE节点分批读取数据并完成导入。

操作步骤

  1. 配置Broker 确保已部署Broker服务并配置正确的存储访问权限:
# broker.conf配置示例
hadoop.security.authentication = simple
fs.defaultFS = hdfs://your-namenode:9000
  1. 提交导入任务
LOAD LABEL db0.label_20231103
(
    DATA INFILE("hdfs:///user/data/20231102/*.csv")
    INTO TABLE user_behavior
    COLUMNS TERMINATED BY ","
    (user_id, action, timestamp)
)
WITH BROKER "hdfs_broker"
PROPERTIES
(
    "timeout" = "3600",
    "max_filter_ratio" = "0.1"
);
  1. 查看任务状态
SHOW LOAD WHERE LABEL = "label_20231103";

性能优化与最佳实践

Stream Load优化建议

  1. 批量提交:将小数据包合并为10-100MB的批次
  2. 连接复用:使用HTTP长连接减少握手开销
  3. 并发控制:单节点并发控制在5-10个任务以内

Broker Load优化建议

  1. 合理分片:大文件拆分为128-256MB的块
  2. 资源隔离:通过resource_tags指定专用BE节点
  3. 错峰执行:避开业务高峰期运行大任务

常见问题排查

  • Stream Load导入失败:检查be.conf中的stream_load_max_mb参数
  • Broker Load卡住:通过fe.conf调整max_running_tasks限制

总结与资源推荐

Stream Load和Broker Load作为Apache Doris的核心导入方式,分别满足了实时和批量数据处理需求。选择时应主要考虑数据规模、实时性要求和数据源位置三个因素。

官方资源

通过合理选择和优化数据导入方式,可以充分发挥Apache Doris的高性能优势,构建高效稳定的数据分析平台。你更倾向于使用哪种导入方式?欢迎在社区讨论区分享你的使用经验!

【免费下载链接】doris Apache Doris is an easy-to-use, high performance and unified analytics database. 【免费下载链接】doris 项目地址: https://gitcode.com/gh_mirrors/dori/doris

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值