spring-kafka,版本
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.6.7</version> </dependency>
在springboot中使用kafkaTemplate,配置
spring: kafka: producer: bootstrap-servers: localhost:9092 acks: 1 key-serializer: org.apache.kafka.common.serialization.StringSerializer retries: 3 value-serializer: org.apache.kafka.common.serialization.ByteArraySerializer
正常使用时无任何问题,但是当在jdk1.8以上使用parallelStream()时,使用java -jar跑在服务器上,可能会出现问题。
报错是class not found org.apache.kafka.common.serialization.ByteArraySerializer。
原因:
类加载问题: parallelStream()中使用的类加载器为app Classloader,而springboot中使用jar包时,我们所写的类加载器为JarUrlClassLoader。而kafkaTemplate在初始化producer时,使用了Thread.currentThread().getContextClassLoader()类加载器去加载org.apache.kafka.common.serialization.ByteArraySerializer,导致出错。
解决办法参考: