You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark Structured Streaming集成Kafka时ClassNotFoundException问题求助

解决Spark Structured Streaming集成Kafka时的ClassNotFoundException问题

问题场景

在Ubuntu系统上进行Spark Structured Streaming与Kafka、Cassandra的集成开发,执行以下spark-submit命令时出现报错:

spark-submit --class StreamHandler --master local[*] --packages "org.apache.spark:spark-sql-kafka-0-10_2.12:3.2.3" target/scala-2.12/stream-handler_2.12-1.0.jar

报错信息:

causedby:java.lang.ClassNotFoundException:org.apache.kafka.common.serialization.ByteArraySerializer
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 24 more

使用的版本信息:

  • Spark:spark-3.2.3-hadoop2.7
  • Scala:2.12.15
  • Kafka:kafka_2.12-2.8.0
  • SBT:sbt-1.9.1

解决方案

1. 补充Kafka客户端依赖到spark-submit命令

spark-sql-kafka-0-10包依赖Kafka客户端组件,但默认不会自动拉取对应版本的kafka-clients包,导致缺失ByteArraySerializer类。需在--packages参数中添加与你的Kafka服务器版本匹配的客户端依赖:

spark-submit --class StreamHandler --master local[*] --packages "org.apache.spark:spark-sql-kafka-0-10_2.12:3.2.3,org.apache.kafka:kafka-clients:2.8.0" target/scala-2.12/stream-handler_2.12-1.0.jar

这里指定kafka-clients:2.8.0与你的Kafka服务器版本一致,确保兼容性。

2. 检查并完善SBT项目依赖

如果项目构建阶段就存在依赖缺失,修改build.sbt文件,明确引入Kafka客户端依赖:

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-sql-kafka-0-10" % "3.2.3" % Provided,
  "org.apache.kafka" % "kafka-clients" % "2.8.0"
)

标记spark-sql-kafka-0-10为Provided是因为Spark集群环境已包含该包,避免运行时冲突;kafka-clients需要明确引入以确保编译和运行时都能找到相关类。

3. 确认版本兼容性

Spark 3.2.3对应的spark-sql-kafka-0-10包兼容Kafka客户端2.8.x版本,与你使用的Kafka 2.8.0服务器版本匹配,不会出现版本不兼容问题。

内容的提问来源于stack exchange,提问作者UTHAYAKUMAR M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:04:59