环境信息及问题
在sparkstreaming整合kafka过程中发现程序无法向kafka推送数据,项目主要配置信息如下:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-10_2.12</artifactId>
<version>3.0.0</version>
</dependency>
val prop = new Properties()
// 添加配置
prop.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "xxx:9092")
prop.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer")
prop.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer")
val producer = new KafkaProducer[String, String](prop)
while (true){
val getData= getData()
getData.foreach(
data=>{
val producerRecord = new ProducerRecord[String, String]("topicxxx", data)
}
)
}
kafka进群版本信息:
kafka_2.11-0.8.2.2
排查过程
启动项目后发现程序一直阻塞在发送消息处,便进行一番操作
1.kafka服务器防火墙检查
2.程序能否获取源数据
3.是否有对应topic
4.在kafka服务器上通过命令行手动消费该topic数据(无数据可消费)
5.删除topic重新建
6.重启kafka集群和zookeeper集群都
经过上述波折,发现都解决不了问题,上述代码也不报错(可能是没有达到超时时间,具体没有进行进一步分析)。经过检查之前写的其他成功发送消息的demo排查,主要的区别就是用的依赖不同成功发送消息的是 spark-streaming-kafka-0-8_x.x
此次出问题的依赖是 spark-streaming-kafka-0-10_2.x
通过上述分析,看了一下kafka服务器集群的版本是2.11-0.8,于是抱着好奇的想法便在昨晚把kafka集群进行重新安装了一遍升级到2.12-2.8.1。修改配置文件重启kafka失败,通过查看启动日志发现如下错误信息:
最终解决方案
根据多年写程序经验判断,典型是环境版本不匹配,由于kafka主要依赖就是jdk,当前jdk版本是 jdk1.8.0_11,通过网上搜一下相关问题,果然有人说是是jdk版本过低,所以就按照资料中的建议升级jdk至 1.8.0_212
最后一步就是重启zookeeper,kafka集群,再次启动程序发现消息发送成功,消费成功。
总结
本次问题最大原因就是
- 项目代码中依赖版本必须 kafka安装版本保持一致
- kafka版本也和jdk版本有一定的关联关系。
如果文章对您有帮助可以一键三连,有问题也可以进行私信联系哦