news 2026/2/15 5:51:35

Flink JDBC Driver把 Flink SQL Gateway 变成“数据库”,让 BI / 工具 / 应用直接用 JDBC 跑 Flink SQL

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flink JDBC Driver把 Flink SQL Gateway 变成“数据库”,让 BI / 工具 / 应用直接用 JDBC 跑 Flink SQL

1. 整体架构与核心概念

推荐你在文章这里放一张架构图(如果你要配图:Client/BI/App → JDBC Driver → SQL Gateway → Flink Cluster)。

核心点:

  • JDBC Driver:Java 库,提供jdbc:flink://...协议实现
  • SQL Gateway:真正的“服务端”,对外暴露 REST Endpoint(或 HiveServer2 Endpoint)
  • Flink Cluster:真正跑 job 的地方

还有一个重要补充:

  • 你也可以用Hive JDBC Driver连 Flink(当你运行 Hive dialect SQL,并且想更好用 HiveCatalog / Hive 函数时),但前提是你启动 SQL Gateway 时启用HiveServer2 endpoint

2. 使用前提:先启动 SQL Gateway

使用 Flink JDBC Driver 之前必须先启动 SQL Gateway,并让它连接到一个运行中的 Flink 集群。

要点就一句话:
SQL Gateway 是 JDBC 的“服务器端”,JDBC Driver 只是客户端。

你连的地址通常是(示例):
jdbc:flink://localhost:8083

如果你在生产环境,一般是:
jdbc:flink://<sql-gateway-host>:<port>

3. 依赖与获取方式

Flink 把 JDBC Driver 的依赖都打进了一个 bundle:

  • GroupId:org.apache.flink
  • ArtifactId:flink-sql-jdbc-driver-bundle
  • Jar:flink-sql-jdbc-driver-bundle-{VERSION}.jar

Maven 依赖:

<dependency><groupId>org.apache.flink</groupId><artifactId>flink-sql-jdbc-driver-bundle</artifactId><version>{VERSION}</version></dependency>

注意点:

  • Flink JDBC driver不包含在 Flink 发行包里,需要你自己从 Maven 下载/引入
  • 某些客户端工具还需要slf4j-api-{slf4j.version}.jar(至少需要 API 包,具体是否需要 binding 看你的运行环境)

4. 命令行连接方式一:Beeline

Beeline 虽然是 Hive 的 CLI,但它支持通用 JDBC,所以可以直接拿来连 Flink SQL Gateway。

步骤:

1)下载flink-jdbc-driver-bundle-{VERSION}.jar,放到$HIVE_HOME/lib
2)运行 beeline,连接:

!connectjdbc:flink://localhost:8083

Flink SQL Gateway 当前会忽略用户名密码,所以直接回车即可。

示例流程(非常适合写在博客里):

CREATETABLET(aINT,bVARCHAR(10))WITH('connector'='filesystem','path'='file:///tmp/T.csv','format'='csv');INSERTINTOTVALUES(1,'Hi'),(2,'Hello');SELECT*FROMT;

你会看到:

  • INSERT返回一个 job id(说明:Flink 在后台提交了作业)
  • SELECT返回结果集

5. 命令行连接方式二:SQLLine

SQLLine 更轻量,也是通用 JDBC CLI。

使用要点:

  • 先编译 SQLLine(示例:./mvnw package -DskipTests

  • 把两个 jar 放到 SQLLine target 目录

    • flink-jdbc-driver-bundle-{VERSION}.jar
    • slf4j-api-{slf4j.version}.jar
  • 启动:./bin/sqlline

  • 连接:!connect jdbc:flink://localhost:8083

后续执行 SQL 与 beeline 类似。

适用场景建议:

  • 你只是想快速验证 SQL Gateway / Driver 是否可用:SQLLine 足够
  • 你本身就有 Hive 环境:Beeline 上手更快

6. BI 工具接入:Tableau

Tableau 支持 “Other Database (JDBC)”(要求版本 >= 2018.3)。

步骤:

1)下载flink-jdbc-driver-(VERSION).jar放到 Tableau 驱动目录

  • Windows:C:\Program Files\Tableau\Drivers
  • Mac:~/Library/Tableau/Drivers
  • Linux:/opt/tableau/tableau_driver/jdbc

2)Tableau 里选择:

  • Connect → Other Database (JDBC)
  • URL 填:jdbc:flink://<gateway-host>:<port>
  • Dialect 选 SQL92
  • 用户名密码留空(当前 gateway 忽略)

典型落地建议:

  • 适合做:看表、跑查询、做报表(尤其是基于 Flink SQL 的实时/近实时分析视图)
  • 注意:持续更新的流式结果集并不适合传统 BI 交互(BI 更擅长“查询得到一个相对稳定的结果集”)

7. Java 应用接入:像连数据库一样执行 Flink SQL

7.1 DriverManager 方式

try(Connectionconnection=DriverManager.getConnection("jdbc:flink://localhost:8083")){try(Statementstatement=connection.createStatement()){statement.execute("CREATE TABLE T(\n"+" a INT,\n"+" b VARCHAR(10)\n"+") WITH (\n"+" 'connector' = 'filesystem',\n"+" 'path' = 'file:///tmp/T.csv',\n"+" 'format' = 'csv'\n"+")");statement.execute("INSERT INTO T VALUES (1, 'Hi'), (2, 'Hello')");try(ResultSetrs=statement.executeQuery("SELECT * FROM T")){while(rs.next()){System.out.println(rs.getInt(1)+", "+rs.getString(2));}}}}

你会得到:

1, Hi 2, Hello

7.2 DataSource 方式

DataSourcedataSource=newFlinkDataSource("jdbc:flink://localhost:8083",newProperties());try(Connectionconnection=dataSource.getConnection()){...}

建议你在博客里补一句:
DataSource 方式更容易和连接池/框架集成(比如 Spring、MyBatis、JOOQ 等)。

8. 和 MyBatis / Spring Data / JOOQ 的关系:能不能直接用?

可以,原理是一样的:

这些框架本质就是走 JDBC API。只要你把 driver 换成 Flink JDBC driver,并把 JDBC URL 指向 SQL Gateway,它们就会把 SQL 发给 Flink 执行。

但要注意两点(生产很关键):

1)不是所有 SQL 都适合
Flink SQL 有自己的语义(流式、作业提交、持续查询、动态表),你不能指望它完全等价于传统 OLTP 数据库。

2)INSERT/持续作业的返回不是“影响行数”
你更可能得到 job id,或者需要异步跟踪执行状态。

9. 常见坑与排查清单

你发 CSDN 这类博客,读者最爱看的就是“踩坑部分”,建议加上:

  • 连接不上:先确认 SQL Gateway 端口对外可达(防火墙/反向代理/内网域名)
  • 依赖冲突:JDBC bundle 已经打包了依赖,项目里再引入一堆 table/planner 依赖可能冲突
  • SLF4J 报错:缺少 slf4j binding 时会提示找不到实现(不影响功能但影响日志)
  • 用户名密码:目前 gateway 可能忽略,但生产通常会在 gateway 前面加认证层(如 API 网关、反向代理、mTLS 等)
  • “SELECT 卡住”:如果你跑的是流式持续查询,结果集可能不会自然结束(CLI/BI 会表现为一直在跑)

10. 一句话总结:它解决的是“接入标准化”

Flink JDBC Driver 的定位非常明确:

  • 对外:统一 JDBC 接入(CLI / BI / 应用 / 框架都能用)
  • 对内:统一把 SQL 提交给 SQL Gateway,由 Gateway 管会话与作业提交
  • 对团队:把 Flink SQL 的使用门槛降到“会 JDBC 就能用”

如果你接下来要把你前面写的Catalog / Modules / Procedures / PTF串起来,我建议你在本文结尾加一个“实战组合章节”:

  • Catalog:把 Hive / JDBC / 外部元数据接进来
  • Modules:把 Hive 函数/自定义函数变成系统内置函数
  • Procedures:把“管理/运维/调度动作”做成可 CALL 的入口
  • PTF:把复杂状态/定时/规则处理做成“可复用 SQL 算子”
  • JDBC Driver:把这整套能力开放给外部系统统一访问
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/13 12:09:58

【计算机毕业设计案例】基于SpringBoot的课堂考勤系统设计与实现考勤发起 - 签到完成 - 数据统计 - 异常处理” 的全流程数字化平台(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/14 3:48:01

DM SQL 排序优化-消除排序

在数据库查询优化中&#xff0c;ORDER BY 子句导致的排序操作往往是性能瓶颈之一。当前测试展示如何通过合理的索引设计来消除排序操作&#xff0c;显著提升查询性能。 场景介绍 我们有一个销售表 EMPLOYEE&#xff0c;包含以下字段&#xff1a; HIRE_DATE&#xff1a;入职时…

作者头像 李华
网站建设 2026/2/5 22:53:48

GEO服务商怎么选?2026年企业AI优化采购避坑完全手册

当企业CTO&营销负责人面对市场上数十家声称能够提供生成引擎优化服务的供应商时&#xff0c;GEO服务商怎么选成为一个既紧迫又复杂的决策难题。根据企业数字化采购联盟发布的2026年第一季度报告&#xff0c;超过42%的企业在首次采购GEO服务时因选择不当导致预算浪费&#x…

作者头像 李华
网站建设 2026/2/13 23:50:48

国内a股有什么买点,高确定性的

截至 2025年12月31日&#xff0c;A股正处于“政策底 业绩真空期 资金博弈”的关键节点。虽然市场整体震荡&#xff0c;但结合政策导向、产业趋势、资金动向和估值安全边际&#xff0c;以下 5个方向具备高确定性买点&#xff0c;适合在2026年一季度布局&#xff1a; ✅ 一、【…

作者头像 李华
网站建设 2026/2/11 13:00:15

学长亲荐!专科生毕业论文必备TOP8一键生成论文工具测评

学长亲荐&#xff01;专科生毕业论文必备TOP8一键生成论文工具测评 2025年专科生论文写作工具测评&#xff1a;为何值得一看&#xff1f; 随着高校教育的不断深化&#xff0c;专科生在毕业论文写作过程中面临的挑战也日益增多。从选题构思到文献检索&#xff0c;再到格式排版与…

作者头像 李华
网站建设 2026/2/14 9:42:36

A 小动物睡眠干扰仪 生物实验资料一览..

什么是大小鼠睡眠干扰仪&#xff1f;睡眠干扰仪可通过输入控制信号控制多个滚筒的转动速度,控制设备与动力设备连接。可以根据需要在控制设备的控制面板上随时调整滚筒转动速度、加速度、方向等。技术参数包含&#xff1a;1、显示&#xff1a;7英寸LCD触摸屏2、记录时间&#x…

作者头像 李华