Stream Load トランザクションインターフェースを使用したデータのロード
バージョン 2.4 以降、StarRocks は Stream Load トランザクションインターフェースを提供し、Apache Flink® や Apache Kafka® などの外部システムからデータをロードするために実行されるトランザクションに対して、2 フェーズコミット (2PC) を実装します。Stream Load トランザクションインターフェースは、高度に並行したストリームロードのパフォーマンスを向上させます。
このトピックでは、Stream Load トランザクションインターフェースと、このインターフェースを使用して StarRocks にデータをロードする方法について説明します。
説明
Stream Load トランザクションインターフェースは、HTTP プロトコル互換のツールや言語を使用して API 操作を呼び出すことをサポートします。このトピックでは、curl を例にとってこのインターフェースの使用方法を説明します。このインターフェースは、トランザクション管理、データ書き込み、トランザクションの事前コミット、トランザクションの重複排除、トランザクションのタイムアウト管理など、さま ざまな機能を提供します。
Stream Load は CSV および JSON ファイル形式をサポートします。個々のサイズが 10 GB を超えない少数のファイルからデータをロードしたい場合、この方法が推奨されます。Stream Load は Parquet ファイル形式をサポートしていません。Parquet ファイルからデータをロードする必要がある場合は、INSERT+files() を使用してください。
トランザクション管理
Stream Load トランザクションインターフェースは、トランザクションを管理するために使用される以下の API 操作を提供します。
-
/api/transaction/begin: 新しいトランザクションを開始します。 -
/api/transaction/prepare: 現在のトランザクションを事前コミットし、データ変更を一時的に永続化します。トランザクションを事前コミットした後、コミットまたはロールバックを実行できます。トランザクションが事前コミットされた後にクラスターがクラッシュした場合でも、クラスターが復旧した後、トランザクションをコミットし続けることができます。 -
/api/transaction/commit: 現在のトランザクションをコミットしてデータの変更を永続化します。 -
/api/transaction/rollback: 現在のトランザクションをロールバックしてデータの変更を中止します。
NOTE
トランザクションが事前コミットされた後は、そのトランザクションを使用してデータを書き続けないでください。トランザクションを使用してデータを書き続けると、書き込みリクエストがエラーを返します。
以下の図は、トランザクションの状態と操作の関係を示しています:
stateDiagram-v2
direction LR
[*] --> PREPARE : begin
PREPARE --> PREPARED : prepare
PREPARE --> ABORTED : rollback
PREPARED --> COMMITTED : commit
PREPARED --> ABORTED : rollback
データ書き込み
Stream Load トランザクションインターフェースは、データを書き込むための /api/transaction/load 操作を提供します。この操作は、1 つのトランザクション内で複数回呼び出すことができます。
トランザクションの重複排除
Stream Load トランザクションインターフェースは、StarRocks のラベリングメカニズムを引き継いでいます。各トランザクションに一意のラベルをバインドすることで、トランザクションに対して最大 1 回の保証を実現できます。