使用 Stream Load 事务接口导入
为了支持和 Apache Flink®、Apache Kafka® 等其他系统之间实现跨系统的两阶段提交,并提升高并发 Stream Load 导入场景下的性能,StarRocks 自 2.4 版本起提供 Stream Load 事务接口。
从 v4.0 版本开始,Stream Load 事务接口支持多表事务,即向同一数据库内的多个表导入数据。
本文介绍 Stream Load 事务接口、以及如何使用该事务接口把数据导入到 StarRocks 中。
接口说明
Stream Load 事务接口支持通过兼容 HTTP 协议的工具或语言发起接口请求。本文以 curl 工具为例介绍如何使用该接口。该接口提供事务管理、数据写入、事务预提交、事务去重和超时管理等功能。
备注
Stream Load 支持导入 CSV 和 JSON 格式的数据,并且建议在导入的数据文件数量较少、单个数据文件的大小不超过 10 GB 时使用。Stream Load 不支持 Parquet 文件格式。如果要导入 Parquet 格式的数据,请使用 INSERT+files().
事务管理
提供如下标准接口,用于管理事务:
-
/api/transaction/begin:开启一个新事务。 -
/api/transaction/prepare: 预提交当前事务并使数据更改 暂时持久化。预提交事务后,您可以继续提交或回滚该事务。如果集群在事务预提交后发生故障,您仍可在集群恢复后继续提交该事务。 -
/api/transaction/commit:提交当前事务,持久化变更。 -
/api/transaction/rollback:回滚当前事务,回滚变更。
说明
在事务预提交以后,请勿继续写入数据。继续写入数据的话,写入请求会报错。
下图展示了事务状态与操作之间的关系:
stateDiagram-v2
direction LR
[*] --> PREPARE : begin
PREPARE --> PREPARED : prepare
PREPARE --> ABORTED : rollback
PREPARED --> COMMITTED : commit
PREPARED --> ABORTED : rollback