StarRocks Flink Connector 使用指南:从StarRocks高效读取数据

StarRocks Flink Connector 使用指南:从StarRocks高效读取数据

starrocks StarRocks是一个开源的分布式数据分析引擎,用于处理大规模数据查询和分析。 - 功能:分布式数据分析;大规模数据查询;数据分析;数据仓库。 - 特点:高性能;可扩展;易于使用;支持多种数据源。 starrocks 项目地址: https://gitcode.com/gh_mirrors/st/starrocks

概述

StarRocks 自研的 Flink Connector 为 Apache Flink 提供了高性能的数据读取能力,相比标准 JDBC 连接器具有显著优势。本文将详细介绍如何使用该连接器从 StarRocks 中批量读取数据。

核心优势

并行读取架构

StarRocks Flink Connector 采用分布式并行读取设计:

  1. 首先从 FE 节点获取查询计划
  2. 将查询计划分发到所有相关 BE 节点
  3. 并行从多个 BE 节点获取数据

这种架构相比传统 JDBC 连接器的单点串行读取(如下图所示),性能可提升数倍。

并行读取架构示意图

环境准备

版本兼容性

| Connector版本 | Flink支持版本 | StarRocks要求 | Java版本 | Scala版本 | |--------------|--------------|--------------|---------|-----------| | 1.2.10 | 1.15-1.19 | ≥2.1 | 8 | 2.11/2.12 |

基础环境

  1. Java环境:需安装 Java 8 或 11

    java -version
    
  2. 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
    

连接器部署

  1. 下载对应版本的 flink-connector-starrocks JAR 包
  2. 将 JAR 包放入 Flink 的 lib 目录
  3. 重启 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();

注意事项

  1. 网络连通性:确保Flink能访问FE的HTTP/MySQL端口和BE的查询端口
  2. 权限控制:使用的账号需有对应表的SELECT权限
  3. 失败处理:任务失败后需要手动重新创建,StarRocks不提供检查点机制
  4. SQL限制:不支持LIMIT子句,聚合函数仅支持count

性能监控

通过Flink WebUI可以监控以下关键指标:

  • totalScannedRows:已扫描行数
  • 各并行度的吞吐量

建议根据监控数据适当调整并行度和内存参数以获得最佳性能。

总结

StarRocks Flink Connector 通过并行读取机制大幅提升了数据抽取效率,是构建实时数据管道的重要组件。合理配置参数和监控任务状态,可以充分发挥其性能优势。

starrocks StarRocks是一个开源的分布式数据分析引擎,用于处理大规模数据查询和分析。 - 功能:分布式数据分析;大规模数据查询;数据分析;数据仓库。 - 特点:高性能;可扩展;易于使用;支持多种数据源。 starrocks 项目地址: https://gitcode.com/gh_mirrors/st/starrocks

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆蜜彬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值