ClassLoading in Kafka Connect 3.3



我们已经修改了Kafka Connect JDBC,以支持自定义转换器,该转换器将将单个sinkRecord转换为多个sinkRecords,以支持交易插入。创建接收器时,可以在配置属性中指定实现SinkRecordConverter

的类

然后,我们尝试通过实现此自定义转换器打包一个Uber Jar,并尝试以两种方式部署它:

  1. 我们将放置在Kafka-Connect-JDBC的同一文件夹中
  2. 我们修改了插件。>

然后我们尝试部署接收器,但是在两种情况下,试图通过反射创建此转换器实例的代码失败了java.lang.ClassNotFoundException.

我们试图通过在两种情况下出现问题出现的断点来调试上加载问题:

  • 在第一种情况下,罐子将作为urlclasspath上的罐子之一出现
  • 在第二种情况下,它甚至不会出现为urlclasspath上的罐子之一

将自定义转换器添加到kafka-connect-jdbc?

的正确方法是什么

我们有两个问题:

  1. 为了组装我们使用的jars jars oonjar,它创建一个自定义classloader
  2. 我们需要从现有的Kafka连接器(JDBC(内部访问该类,而不是仅从Kafka-connect访问。

我们发现的解决方案如下:

  • 我们放弃了Uber Jar,我们使用SBT Pack将所有LIB部署在Kafka-Connect实例上。
  • 我们将罐子物理放在kafka-connect-jdbc位于的同一文件夹上

相关内容

  • 没有找到相关文章

最新更新