FLINK 1.12.2 jdbc实现oracle或sqlserver连接器

本文介绍了如何扩展Flink JDBC连接器以支持Oracle和SQLServer。首先,需要编译Flink源码,然后创建SQLServerDialect和SQLServerRowConverter类,重写getUpsertStatement实现upsert操作。最后,将SQLServerDialect注册到JdbcDialects中,并在实际应用中调用新的jdbc connector。
摘要由CSDN通过智能技术生成

Flink SQL Connector JDBC目前只支持Mysql,Derby和Postgres,但是oracle和sqlserver可以通过JDBC connector自己扩展。目前只能修改重编FLINK源码实现扩展,社区正在积极对此进行抽象和改造,未来应该会有更好的接口扩展方式。

目录

1.编译FLINK源码

2.SQLSERVER JDBC扩展示例

2.1 Flink JDBC源码简介

2.2 Flink JDBC扩展思路

2.3 Flink JDBC SQLServer connector实现

1.实现SQLServerRowConverter

2.实现SQLServerDialect并重写getUpsertStatement

3.将SQLServerDialect注册到JdbcDialects中

3.调用jdbc connector链接oracle/sqlserver


1.编译FLINK源码

从flink官网提供的github链接下载源码,因为我是用IDE编译所以直接下载zip包,解压后直接用IDE打开就行。

 

所有Flink的组件都在,maven加载依赖需要比较长时间。依赖包可能无法一次顺利下载完成,中间会报某些包(尤其是maven插件)下载失败。

找到flink-connectors下面的flink-connector-jdbc这个工程,我们只编译它。(当然你也可以都编译,只是时间比较长。)未修改先编译一次的目的是为了排除修改后编译不通过的原因是源码本身导致的。

看到BUILD-SECCESS说明编译成功了。

中途遇到两个问题:

1.依赖下载失败

删除本地maven仓库中的jar包目录后会重新下载,直到所有包都下载完成。对于访问外网有麻烦的童鞋可以换成阿里云的maven仓库地址https://maven.aliyun.com/repository/apache-snapshots

2.要求代码格式化

应该是Flink源码中要求的,编译会提示使用mvn spotless进行格式化。但是IDE中默认maven仓库地址是10.10.xx,总是执行失败。查询该命令后发现可以指定自己的setting.xml,命令如下:

mvn spotless:apply -s C:\Users\xxx\.m2\settings.xml

从终端进入flink-connector-jdbc的目录后,顺利执行,再次编译即可。

2.SQLSERVER JDBC扩展示例

2.1 Flink JDBC源码简介

通过源码浏览发现Flink将实现的connector接口注册在org.apache.flink.connector.jdbc.dialect.JdbcDialects中:

private static final List<JdbcDialect> DIALECTS =

Arrays.asList(

new DerbyDialect(),

new MySQLDialect(),

new PostgresDialect(),

);

每个Dialect都扩展自AbstractDialect,比如MySQL的:

/** JDBC dialect for MySQL. */

public class MySQLDialect extends AbstractDialect

而AbstractDialect继承自JdbcDialect,JdbcDialect中已经实现了通用的CURD接口:

  • getSelectFromStatement
  • getDeleteStatement
  • getUpdateStatement
  • getInsertIntoStatement

MySQLDialect自己重写了getUpsertStatement实现upsert。

2.2 Flink JDBC扩展思路

根据上面的介绍,只要仿照MySQLDialect编写SQLServerDialect。需要实现2个类,分别是SQLServerDialect和SQLServerRowConverter,SQLServerDialect会引用SQLServerRowConverter,并重写getUpsertStatement实现upsert。最后将SQLServerDialect注册到JdbcDialects中即可。Oracle的实现过程也是一样的。

2.3 Flink JDBC SQLServer connector实现

1.实现SQLServerRowConverter

在包org.apache.flink.connector.jdbc.internal.converter中新建SQLServerRowConverter,可以直接复制M

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值