先说一个结论:Flink的Oracle-CDC与MySQL-CDC有版本兼容问题,在于Debezium包版本不同,由于内置MySQL-CDC我们不能改版本,Oracle-CDC又要FlinkCDC 2.1以上的版本,因此我们需要上传一个新的MySQL-CDC。
公司刚入手阿里云的flink,不得不说flink全托管对于简单的数据同步是比较的友好,但是如果是用它来进行flink实时计算,那还是有点小问题,比如底层代码不给开发,只能让你配合它,最多给你个flink1.13或1.15版本选择等等。
当然以上其实问题不大,大家基本上都用这两个版本,相关代码基本都能兼容,但是上来就有个严重的问题,没有oracle-cdc,也就意味着你只能走jdbc的离线同步。好在flink可以自定义连接器,同理阿里云flink也支持。
好,那么就先创建oracle连接器吧。目前阿里云Flink版本的连接器创建在下图位置:
然后我们需要去flinkcdc官网下载oracle连接器:https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-oracle-cdc/2.2.1/flink-sql-connector-oracle-cdc-2.2.1.jar
下载好了后,选择好文件直接上传,会自动检测参数,如有需要可以进行配置检查,通常直接点击完成即可。
同样的道理,我们去官网下载一个同版本的MySQL-CDC:
这上面两个jar包2.1,2.2版本都行,但是要保证flinkcdc的版本一致
这里下载好后,我们需要在IDEA里修改源码一处:
这里最好是直接在本地的用到了flink的MySQL-CDC的项目里打开,不会报缺失依赖文件,我们复制一下路径,再在自己的IDEA里创建一下
创建好后将刚刚的MySqlTableSourceFactory类原封不动的全部粘贴上去,这样我们从一个.class文件变成了自己的.java文件,再修改成自己想要的connector名,不能和mysql重名,例如我就叫mysql-test-cdc
我们再将其编译成.class文件,就能在target里找到这个文件
将其复制到原来的jar包位置
用WinRAR打开
直接到那个目录下粘贴上去替换即可:
再将这个jar包同oracle-cdc一样上传至阿里云flink,我们在写代码时,connector写mysql-test-cdc即可运行了。