的正确方法是什么
我们已经修改了Kafka Connect JDBC,以支持自定义转换器,该转换器将将单个sinkRecord转换为多个sinkRecords,以支持交易插入。创建接收器时,可以在配置属性中指定实现SinkRecordConverter
然后,我们尝试通过实现此自定义转换器打包一个Uber Jar,并尝试以两种方式部署它:
- 我们将放置在Kafka-Connect-JDBC的同一文件夹中
- 我们修改了插件。>
然后我们尝试部署接收器,但是在两种情况下,试图通过反射创建此转换器实例的代码失败了java.lang.ClassNotFoundException.
我们试图通过在两种情况下出现问题出现的断点来调试上加载问题:
- 在第一种情况下,罐子将作为urlclasspath上的罐子之一出现
- 在第二种情况下,它甚至不会出现为urlclasspath上的罐子之一
将自定义转换器添加到kafka-connect-jdbc?
我们有两个问题:
- 为了组装我们使用的jars jars oonjar,它创建一个自定义classloader
- 我们需要从现有的Kafka连接器(JDBC(内部访问该类,而不是仅从Kafka-connect访问。
我们发现的解决方案如下:
- 我们放弃了Uber Jar,我们使用SBT Pack将所有LIB部署在Kafka-Connect实例上。
- 我们将罐子物理放在kafka-connect-jdbc位于的同一文件夹上