ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Apache Doris Stream Load 实战教程:RESTful 接口详解与多语言 SDK 选型指南

Apache Doris Stream Load 实战教程:RESTful 接口详解与多语言 SDK 选型指南 Apache Doris Stream Load 实战教程RESTful 接口详解与多语言 SDK 选型指南【免费下载链接】dorisApache Doris is a real-time analytics and hybrid search database for AI agents.项目地址: https://gitcode.com/GitHub_Trending/doris/doris业务侧常见的痛点是数据每 10 分钟攒成一批就要整体落入分析库。对 Apache Doris 这类实时分析数据库官方把批量导入做成了一个 HTTP 接口——Stream Load客户端向 FE前端节点发一个 PUT 请求请求体就是原始数据FE 转发到 BE后端节点完成写入并同步返回导入结果。导入行为不需要依赖 JDBC 驱动任何语言、任何能发 HTTP 请求的脚本都能接入仓库中的 samples/stream_load 目录给出了 Python、Go、Java、Rust 四份可直接运行的示例。第一条导入链路最小可运行请求先建一张两列的表用 curl 提交两行 CSV 数据curl -u root: \ -H Content-Type: text/plain; charsetUTF-8 \ -H format: csv \ -H column_separator: , \ -H Expect: 100-continue \ --data-binary $1,Tom\n2,Jelly \ http://127.0.0.1:8030/api/db0/t_user/_stream_load✅ 请求成功时返回的 JSON 与仓库示例注释中的输出一致{ TxnId: 14017, Label: 2486da70-94bb-47cc-a810-70791add2b8c, Status: Success, Message: OK, NumberTotalRows: 2, NumberLoadedRows: 2, NumberFilteredRows: 0, NumberUnselectedRows: 0, LoadBytes: 13, LoadTimeMs: 54 }看到Status: Success与NumberLoadedRows等于行数说明这条链路已经打通。Stream Load 请求参数说明端点固定为http://fe_host:fe_http_port/api/db/table/_stream_load。fe_http_port对应 conf/fe.conf 中的http_port默认值 8030。鉴权走 HTTP Basic Auth用户名密码编码进Authorization头。请求参数位置说明Content-TypeHeader数据编码如text/plain; charsetUTF-8formatHeader数据格式csv或jsoncolumn_separatorHeaderCSV 字段分隔符默认逗号labelHeader可选导入任务唯一标识用于幂等去重columnsHeader指定列顺序、默认值与表达式如id,name,cityunknownExpect: 100-continueHeader大报文导入前协商避免重复读请求体响应字段含义TxnId本次导入的事务号可用于事后追查Status结果状态Success/Label Already Exists等NumberTotalRows/NumberLoadedRows总行数 / 实际写入行数NumberFilteredRows因校验失败被过滤的行数LoadTimeMs导入耗时毫秒Message成功为OK失败时给出具体原因⚠️ HTTP 状态码 200 只表示请求被 FE 正常接收导入本身可能失败务必解析响应体中的Status字段。Java 示例源码中的注释明确指出了这一点见 samples/stream_load/java/DorisStreamLoad.java。多语言 SDK 选型对比仓库 samples/stream_load 下的四份示例没有封装成独立库而是完整演示了与 Doris 交互的两个关键细节FE 收到请求后会 307 重定向到实际处理请求的 BE而标准 HTTP 客户端在跟随重定向时可能把 PUT 降级为 GET 或直接丢掉 Basic Auth 头。Java 示例为此覆写了isRedirectable让 PUT 可跟随重定向Python 示例则关闭了requests跨域丢弃鉴权头的默认行为。选型时按团队技术栈直接取对应示例改造即可示例依赖请求方式适用场景Python DorisStreamLoad.pyrequestsSession.request(PUT)脚本、数据管道、快速验证Go doris_stream_load.go标准库 spf13/castnet/http高并发采集端演示了 JSON 格式与jsonpaths过滤Java DorisStreamLoad.javaApache HttpClient 4.5.xHttpPut企业级 Java 服务处理重定向与鉴权头最完整Rust doris_stream_load.rsreqwesttokio异步put低延迟、无 GC 的服务端组件高频问题排查清单⚠️401 / 认证失败确认用户名密码正确Basic 头编码无误Base64(user:pass)端口是否打错导致打到了别的 HTTP 服务。⚠️连接超时确认连的是 FE 的http_port默认 8030conf/fe.conf 中可查而不是rpc_port9020用telnet fe_host 8030验证网络与防火墙。⚠️行数对不上NumberFilteredRows大于 0 时Message里会说明过滤原因用columns头显式指定列顺序或在提交前预处理脏数据。⚠️Java 报Content-Length header already presenthttpclient 版本不匹配导致示例源码注释要求使用 4.5.3。⚠️重试后返回Status: Label Already Exists这通常不是错误见下一节。进阶实践建议幂等与断点续传给每批数据固定label如业务名_分区_批次号重试时复用同一 label。Doris 对相同 label 返回Status: Label Already Exists与ExistingJobStatus客户端据此判断该批已落库实现 at-most-once 语义Go 示例中的crowd_%d_%d_%d就是这种命名方式。用 TxnId 跟踪进度响应中的TxnId对应一次导入事务导入失败或超时后可凭它通过SHOW LOAD等命令追查状态。客户端预处理字段裁剪、默认值、格式转换在客户端完成后提交减少服务端过滤行Java 示例还演示了把最后一行换行符删掉的细节避免尾部空行。监控指标把LoadTimeMs与NumberFilteredRows纳入采集前者反映批次耗时变化后者突增通常意味着上游数据格式出了问题。资源索引示例目录samples/stream_loadPythonsamples/stream_load/python/DorisStreamLoad.pyGosamples/stream_load/go/doris_stream_load.goJavasamples/stream_load/java/DorisStreamLoad.javaRustsamples/stream_load/rust/src/doris_stream_load.rs生产参考Flink / Spark 的 Java 实现位于 samples/doris-demo端口配置conf/fe.conf【免费下载链接】dorisApache Doris is a real-time analytics and hybrid search database for AI agents.项目地址: https://gitcode.com/GitHub_Trending/doris/doris创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表