最近开发spark+kafka项目但是却遇到了很多的坑,比如
Exception in thread "main" java.lang.ClassCastException: kafka.cluster.BrokerEndPoint cannot be cast to kafka.cluster.Broker
这个问题比较坑,突然间一看还真的以为自己不小心写了一个类型转化的错误呢,但是实际上不是。本人开发程序用的是spark2.1+kafka0.10.0.0但是在引用maven时引用错误
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka_2.11 -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.10.0.0</version>
</dependency>
后来我换了maven依赖,换为
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-10_2.11</artifactId>
<version>2.1.1</version>
</dependency>
这个错误报错就没了
然而这个时候我想要使用kafkautils类却发现怎么导报都不成功
包名为
import org.apache.spark.streaming.kafka.KafkaUtils
后来发现人家已经改名了,所以我才导包不成功
import org.apache.spark.streaming.kafka010.KafkaUtils
包的kafka后面加了一个010.
换了这个包肯定要使用啊,但是我发现这个类也已经变了,(真是女大十八变啊)
所以使用时就变成了
val kafkaParams = Map(
"bootstrap.servers" ->KafkaConfUtils.getProp("bootstrap.servers"),
"group.id" -> "group1",
"value.deserializer" ->KafkaConfUtils.getProp("value.deserializer"),
"key.deserializer" ->KafkaConfUtils.getProp("key.deserializer")
)
var topic=Array("taskcompare");
var lines: InputDStream[ConsumerRecord[String, String]] = KafkaUtils.createDirectStream[String,String](ssc, PreferConsistent,Subscribe[String,String](topic,kafkaParams))
其中的PreferConsistent,Subscribe都是来自于kafka010的包中的类。