记一次sparkStreaming无法推送(接收)kafka推送数据问题

环境信息及问题

在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版本有一定的关联关系。

如果文章对您有帮助可以一键三连,有问题也可以进行私信联系哦

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uniquewdl

匆忙的人生,总有你喜欢的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值