【StarRocks系列】事务

目录

SQL 事务

Stream Load 事务接口

一、接口原理

二、使用流程

三、关键注意事项

四、接口优势

回滚是全局性的

参考文档


SQL 事务

从 v3.5.0 开始,StarRocks 支持 SQL 事务,用于在将数据导入到多个表时,确保更新操作的原子性。

目前,StarRocks 的 SQL 事务仅支持 INSERT 和 SELECT 语句。update语句不支持事务

SQL 事务 | StarRocks

Stream Load 事务接口

为了支持和 Apache Flink®、Apache Kafka® 等其他系统之间实现跨系统的两阶段提交,并提升高并发 Stream Load 导入场景下的性能,StarRocks 自 2.4 版本起提供 Stream Load 事务接口。

以下是针对 StarRocks Stream Load 事务接口 的原理和使用流程整理,结合官方文档内容提炼核心要点:

使用 Stream Load 事务接口导入 | StarRocks


一、接口原理(两阶段提交)

  1. 两阶段提交(2PC)机制
    • 预提交 (/prepare): 临时持久化变更,事务状态可恢复(若此时 StarRocks 宕机,恢复后可继续提交或回滚)。 • 正式提交 (/commit): 持久化变更并对外可见。 • 回滚 (/rollback): 丢弃未提交的数据。
  2. 事务标签(Label)去重
    • 每个事务通过唯一 Label 绑定,实现 "At-Most-Once"(至多一次) 语义。 • 相同 Label 重复开启事务时,前一个事务会被强制回滚。
  3. 超时管理
    • 通过 timeout 参数设置事务总超时时间。 • 通过 idle_transaction_timeout 设置空闲超时(无数据写入时自动回滚)。


二、使用流程


前提条件

  1. 权限: 用户需具备目标表的 INSERT 权限。
  2. 网络: 确保客户端可访问 FE(端口 8030)和 BE(端口 8040)。
  3. 数据限制:
    • 仅支持 CSV/JSON 格式(单文件 ≤ 10GB)。 • CSV 需包含行分隔符(默认 \n),列分隔符若非 \t 需显式指定。

操作步骤

# 1. 开启事务 (Begin)
curl --location-trusted -u : \
  -H "label: