StarRocks Flink Connector 使用指南:从StarRocks高效读取数据
概述
StarRocks 自研的 Flink Connector 为 Apache Flink 提供了高性能的数据读取能力,相比标准 JDBC 连接器具有显著优势。本文将详细介绍如何使用该连接器从 StarRocks 中批量读取数据。
核心优势
并行读取架构
StarRocks Flink Connector 采用分布式并行读取设计:
- 首先从 FE 节点获取查询计划
- 将查询计划分发到所有相关 BE 节点
- 并行从多个 BE 节点获取数据
这种架构相比传统 JDBC 连接器的单点串行读取(如下图所示),性能可提升数倍。
环境准备
版本兼容性
| Connector版本 | Flink支持版本 | StarRocks要求 | Java版本 | Scala版本 | |--------------|--------------|--------------|---------|-----------| | 1.2.10 | 1.15-1.19 | ≥2.1 | 8 | 2.11/2.12 |
基础环境
-
Java环境:需安装 Java 8 或 11
java -version
-
Flink部署:
# 下载和解压 wget https://archive.apache.org/dist/flink/flink-1.14.5/flink-1.14.5-bin-scala_2.11.tgz tar -xzf flink-1.14.5-bin-scala_2.11.tgz cd flink-1.14.5 # 启动集群 ./bin/start-cluster.sh
连接器部署
- 下载对应版本的
flink-connector-starrocks
JAR 包 - 将 JAR 包放入 Flink 的
lib
目录 - 重启 Flink 集群
配置参数详解
通用参数
| 参数 | 必选 | 说明 | |------|------|------| | connector | 是 | 固定值 starrocks
| | scan-url | 是 | FE HTTP地址,格式 fe_host:fe_http_port
| | jdbc-url | 是 | FE MySQL地址,格式 jdbc:mysql://fe_host:fe_query_port
| | username/password | 是 | 数据库账号密码 | | database-name/table-name | 是 | 要读取的库表 |
性能调优参数
scan.connect.timeout-ms
:连接超时时间(默认1000ms)scan.params.keep-alive-min
:任务存活时间(建议≥5分钟)scan.params.mem-limit-byte
:单BE查询内存限制(默认1GB)
数据类型映射
| StarRocks类型 | Flink类型 | 备注 | |--------------|----------|------| | INT/BIGINT等 | 对应数值类型 | 保持精度 | | VARCHAR/CHAR | STRING | | | DATETIME | TIMESTAMP | | | ARRAY/JSON | 对应复杂类型 | 需特定版本支持 |
实战示例
准备测试数据
CREATE TABLE score_board (
id INT PRIMARY KEY,
name VARCHAR(65533),
score INT
) DISTRIBUTED BY HASH(id);
INSERT INTO score_board VALUES
(1, 'Bob', 21), (2, 'Stan', 21) ... (21, 'Jack', 29);
方式一:Flink SQL读取
CREATE TABLE flink_test (
id INT,
name STRING,
score INT
) WITH (
'connector'='starrocks',
'scan-url'='192.168.x.x:8030',
'jdbc-url'='jdbc:mysql://192.168.x.x:9030',
'username'='user',
'password'='pass',
'database-name'='test',
'table-name'='score_board'
);
-- 执行查询
SELECT id, name FROM flink_test WHERE score > 20;
方式二:DataStream API读取
// 构建配置
StarRocksSourceOptions options = StarRocksSourceOptions.builder()
.withProperty("scan-url", "192.168.x.x:8030")
.withProperty("jdbc-url", "jdbc:mysql://192.168.x.x:9030")
.withProperty("username", "root")
.withProperty("password", "")
.withProperty("table-name", "score_board")
.withProperty("database-name", "test")
.build();
// 定义Schema
TableSchema schema = TableSchema.builder()
.field("id", DataTypes.INT())
.field("name", DataTypes.STRING())
.field("score", DataTypes.INT())
.build();
// 创建Source
env.addSource(StarRocksSource.source(schema, options))
.setParallelism(5)
.print();
注意事项
- 网络连通性:确保Flink能访问FE的HTTP/MySQL端口和BE的查询端口
- 权限控制:使用的账号需有对应表的SELECT权限
- 失败处理:任务失败后需要手动重新创建,StarRocks不提供检查点机制
- SQL限制:不支持LIMIT子句,聚合函数仅支持count
性能监控
通过Flink WebUI可以监控以下关键指标:
totalScannedRows
:已扫描行数- 各并行度的吞吐量
建议根据监控数据适当调整并行度和内存参数以获得最佳性能。
总结
StarRocks Flink Connector 通过并行读取机制大幅提升了数据抽取效率,是构建实时数据管道的重要组件。合理配置参数和监控任务状态,可以充分发挥其性能优势。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考