主要有兩種方法可以解決:修改jar包內部的包名或者使用自定義classloader
Flink需要導入kafka-clients來支持對kafka的生產和消費。kafka-clients0.11提供的api僅在kafka0.11、kafka0.10版本可用,如果要對kafka0.8、kafka0.9進行生產和消費,則需要使用版本相匹配的kafka-clients的jar包。但如果直接使用這些jar包會導致jar包沖突,因為里面的類名字相同且都是在相同包名下的。
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_${scala.binary.version}</artifactId> <version>0.11.0.0</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_${scala.binary.version}</artifactId> <version>0.10.2.1</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_${scala.binary.version}</artifactId> <version>0.9.0.1</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_${scala.binary.version}</artifactId> <version>0.8.2.2</version> </dependency>
像這樣把所有版本的依賴引入必然會造成jar包沖突。
因此需要對jar包中的包名進行修改防止沖突。
這里分別將org.apache.kafka修改為org.apache.kafka08和org.apache.kafka09。使用的工具為jarjar。
