彰化县网站建设_网站建设公司_Spring_seo优化
2025/12/31 23:29:08 网站建设 项目流程

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:把这整套能力开放给外部系统统一访问

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询