Storm整合Kafka运行报错NoClassDefFoundError: StringDeserializer
问题根因
NoClassDefFoundError: org/apache/kafka/common/serialization/StringDeserializer 由两个核心问题导致,和Spark Streaming场景的解决方案无关联:
- Storm 2.4.0 版本的
storm-kafka-client模块官方适配Kafka 2.x系列客户端,手动引入的3.0.0版本kafka-clients与Storm依赖存在API、类签名不兼容问题,类加载阶段无法匹配到对应序列化类。 - 现有
maven-assembly-plugin打包逻辑存在缺陷,打fatjar过程中会出现依赖类丢失、同路径类覆盖问题,本地运行LocalCluster时类路径下缺失完整的Kafka客户端类。
修复步骤
1. 对齐Kafka客户端版本
Storm 2.4.0 最高兼容Kafka 2.8.x版本客户端,将pom中kafka-clients的版本替换为兼容版本,避免版本冲突:
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.8.1</version> </dependency>
禁止使用3.x版本Kafka客户端,会持续出现序列化类不匹配、API调用不存在的问题。
2. 替换打包插件
将原有maven-assembly-plugin替换为maven-shade-plugin,解决fatjar打包时类丢失、签名文件冲突问题,在pom的build>plugins节点下做如下替换:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>analytics.App</mainClass> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> </transformers> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin>
3. 显式指定反序列化器
在业务代码构造Kafka消费者配置时,显式声明key、value的反序列化类,避免默认类加载逻辑在版本存在偏差时找不到类:
在原有Properties prop = new Properties();代码块下补充两行配置:
prop.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); prop.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
验证方式
执行mvn clean package重新构建,使用shade插件生成的fatjar启动本地LocalCluster即可正常运行,提交远程集群时storm-core的provided配置无需修改,集群会自带对应依赖。
内容的提问来源于stack exchange,提问作者GRAN
相关产品推荐
相关产品推荐

