草庐IT

在IDEA本地开发时Flink CDC和Flink的guava版本冲突解决办法

Bulut0907 2023-06-16 原文

目录

1. 冲突原因

使用Flink CDC 2.2.0版本的时候,会报ThreadFactoryBuilder这个类找不到的错误,如下所示:

java.lang.NoClassDefFoundError: org/apache/flink/shaded/guava18/com/google/common/util/concurrent/ThreadFactoryBuilder

因为Flink CDC使用的是guava版本是18.0-13.0,如下所示:

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-shaded-guava</artifactId>
            <version>18.0-13.0</version>
        </dependency>

而Flink 1.14.4使用的guava版本是30.1.1-jre-14.0,如下所示:

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-shaded-guava</artifactId>
            <version>30.1.1-jre-14.0</version>
        </dependency>

但是项目中会使用30.1.1-jre-14.0版本的guava,所有会找不到guava 18.0-13.0这个版本,所以就会报错

找到了原因,下面就可以想办法进行解决了

2. 解决办法

需要我们自己编译源码,源码的编译过程如下:

  1. 下载源码包并解压,如下所示
[root@bigdata001 ~]# wget https://github.com/ververica/flink-cdc-connectors/archive/refs/tags/release-2.2.0.tar.gz
[root@bigdata001 ~]#
[root@bigdata001 ~]# tar -zxvf release-2.2.0.tar.gz
[root@bigdata001 ~]#
[root@bigdata001 ~]# cd flink-cdc-connectors-release-2.2.0/
[root@bigdata001 flink-cdc-connectors-release-2.2.0]# 
  1. 修改pom.xml后的guava版本如下
[root@bigdata001 flink-cdc-connectors-release-2.2.0]# cat pom.xml
......省略部分......
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-shaded-guava</artifactId>
            <version>30.1.1-jre-14.0</version>
        </dependency>
......省略部分......
[root@bigdata001 flink-cdc-connectors-release-2.2.0]#
  1. 修改源码:将flink-cdc-connectors-release-2.2.0目录拷贝到本地,用IDEA打开,按Ctrl + Shift + R将所有guava18替换成guava30,然后替换Centos7上的flink-cdc-connectors-release-2.2.0目录

  2. 编译源码,如下所示

[root@bigdata001 flink-cdc-connectors-release-2.2.0]# mvn clean install -Dmaven.test.skip=true
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] flink-cdc-connectors                                               [pom]
[INFO] flink-connector-debezium                                           [jar]
[INFO] flink-cdc-base                                                     [jar]
[INFO] flink-connector-test-util                                          [jar]
[INFO] flink-connector-mysql-cdc                                          [jar]
[INFO] flink-connector-postgres-cdc                                       [jar]
[INFO] flink-connector-oracle-cdc                                         [jar]
[INFO] flink-connector-mongodb-cdc                                        [jar]
[INFO] flink-connector-oceanbase-cdc                                      [jar]
[INFO] flink-connector-sqlserver-cdc                                      [jar]
[INFO] flink-connector-tidb-cdc                                           [jar]
[INFO] flink-sql-connector-mysql-cdc                                      [jar]
[INFO] flink-sql-connector-postgres-cdc                                   [jar]
[INFO] flink-sql-connector-mongodb-cdc                                    [jar]
[INFO] flink-sql-connector-oracle-cdc                                     [jar]
[INFO] flink-sql-connector-oceanbase-cdc                                  [jar]
[INFO] flink-sql-connector-sqlserver-cdc                                  [jar]
[INFO] flink-sql-connector-tidb-cdc                                       [jar]
[INFO] flink-cdc-e2e-tests                                                [jar]
[INFO] 
[INFO] -----------------< com.ververica:flink-cdc-connectors >-----------------
[INFO] Building flink-cdc-connectors 2.2.0                               [1/19]
......省略部分......
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for flink-cdc-connectors 2.2.0:
[INFO] 
[INFO] flink-cdc-connectors ............................... SUCCESS [  2.666 s]
[INFO] flink-connector-debezium ........................... SUCCESS [  4.044 s]
[INFO] flink-cdc-base ..................................... SUCCESS [  2.823 s]
[INFO] flink-connector-test-util .......................... SUCCESS [  1.013 s]
[INFO] flink-connector-mysql-cdc .......................... SUCCESS [  3.430 s]
[INFO] flink-connector-postgres-cdc ....................... SUCCESS [  1.242 s]
[INFO] flink-connector-oracle-cdc ......................... SUCCESS [  1.192 s]
[INFO] flink-connector-mongodb-cdc ........................ SUCCESS [  1.806 s]
[INFO] flink-connector-oceanbase-cdc ...................... SUCCESS [  1.285 s]
[INFO] flink-connector-sqlserver-cdc ...................... SUCCESS [  0.747 s]
[INFO] flink-connector-tidb-cdc ........................... SUCCESS [ 36.752 s]
[INFO] flink-sql-connector-mysql-cdc ...................... SUCCESS [  8.316 s]
[INFO] flink-sql-connector-postgres-cdc ................... SUCCESS [  5.348 s]
[INFO] flink-sql-connector-mongodb-cdc .................... SUCCESS [  5.176 s]
[INFO] flink-sql-connector-oracle-cdc ..................... SUCCESS [  7.375 s]
[INFO] flink-sql-connector-oceanbase-cdc .................. SUCCESS [  5.118 s]
[INFO] flink-sql-connector-sqlserver-cdc .................. SUCCESS [  4.721 s]
[INFO] flink-sql-connector-tidb-cdc ....................... SUCCESS [ 18.166 s]
[INFO] flink-cdc-e2e-tests ................................ SUCCESS [  2.886 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:54 min
[INFO] Finished at: 2022-06-09T09:08:57+08:00
[INFO] ------------------------------------------------------------------------
[root@bigdata001 flink-cdc-connectors-release-2.2.0]#
  1. 将flink-sql-connector-mysql-cdc/target/flink-sql-connector-mysql-cdc-2.2.0.jar拷贝到本地进行引用,同时将原来pom.xml的flink-connector-mysql-cdc依赖注释掉,最后就可以在本地运行项目了

  2. 如果不放心可以在本地使用自己编译的flink-sql-connector-mysql-cdc-2.2.0.jar,在生成环境使用github flink cdc提供的jar包

有关在IDEA本地开发时Flink CDC和Flink的guava版本冲突解决办法的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  3. ruby-on-rails - 在 ruby​​ .gemspec 文件中,如何指定依赖项的多个版本? - 2

    我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这

  4. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  5. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  6. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  7. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  8. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  9. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  10. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

随机推荐