kafka client版本,kafka clients

  kafka client版本,kafka clients

  

目录

被卡夫卡-客户和春天卡夫卡版本坑春天-卡夫卡,卡夫卡-客户三者兼容性关系

 

  

被kafka-client和springkafka版本坑

上周刚刚欢天喜地的在Linux操作系统操作系统上部了卡夫卡,这周打算用弹簧靴框架写个简单演示跑一下,结果悲剧就此展开。

 

  首先建立专家工程:pom中添加春靴卡夫卡依赖:

  ?可扩展标记语言版本=1.0 编码=UTF八号?项目xmlns= http://maven。阿帕奇。org/POM/4。0 .0 xmlns : xsi= http://www。w3。org/2001/XML schema-instance xsi :架构位置= http://maven。阿帕奇。org/POM/4。0 .0 http://maven.apache.org/xsd/maven-4.0.0.xsd模型版本4 .0 .0/模型版本父groupIdorg.springframework.boot/groupId人工弹簧-启动-母公司/version2.1.5.RELEASE/version人工弹簧相对路径/。-从存储库查找父级-/父级groupIdcom.example/groupId artifactIdkafkaproducer/artifactId版本0。0 .1-快照/版本名称kafkaproducer/名称描述Spring Boot的演示项目/描述属性Java。版本1.8/Java。版本/属性依赖关系groupIdorg.springframework.boot/groupId artifact id spring-boot-starter-web/artifact id/依赖关系依赖关系groupIdorg.projectlombok/groupId artifact id lombok/artifact id optional true/optional/依赖关系groupIdorg.springframework.boot/groupId artifact id spring-starter-test/artifact id范围测试/范围/依赖项依赖关系groupIdorg.springframework.kafka/groupId人工泉水

  ;/artifactId>         </plugin>      </plugins>   </build>  </project>配置文件如下:

  

server.port=8089spring.kafka.bootstrap-servers=ip:portspring.kafka.producer.retries= 0spring.kafka.producer.batch-size=16384spring.kafka.producer.buffer-memory=33554432spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializerspring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializerspring.kafka.producer.linger.ms=1

然后新建一个Producer类

 

  

package com.example.kafkaproducer;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.kafka.core.KafkaTemplate;import org.springframework.stereotype.Component; @Componentpublic class KafkaProducer {    @Autowired    KafkaTemplate kafkaTemplate;    public void produce(){        kafkaTemplate.send("test","hello word");        System.out.println("发送消息");    }}

在test类中调用

 

  

package com.example.kafkaproducer;  import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;  @RunWith(SpringRunner.class)@SpringBootTestpublic class KafkaproducerApplicationTests {    @Autowired KafkaProducer kafkaProducer;    @Test   public void contextLoads() {      kafkaProducer.produce();   } }

然后控制台就会打印一个莫名奇妙的错误,没有打印任何堆栈信息,大概意思只是表达了连接不上。

 

  

Exception thrown when sending a message with key='null' and payload='' to topic

 

  

telnet ip+port 是可以通的

 

  随后发现,xshell上启动的kafka-server在报这样一个错,更详细的没有留存。

  

ERROR Closing socket for /127.0.0.1 because of error (kafka.network.Processor)kafka.common.KafkaException: Wrong request type 18

 

  

百度了一下,很可能是Linux上的kafka版本和pom中引入的spring-kafka依赖不匹配造成的,于是查看对应关系。

 

  查看kafka,发现装的是一个0.8.2.1 版本的kafka,该版本的kafka是2015年3月发布的版本,可以说是十分古老,真是不知道为什么当初要选这么老的版本。

  换了几次spring-kafka的pom之后,依然在报这个问题,于是我选择换更新的kafka的包。

  换了2.2.0版本kafka的包,问题得到解决。

  其中consumer的创建命令和老版本的不太一样,且consumer和producer需使用相同的端口号,而不是像之前producer配置为broker的端口,consumer配置为zookeeper的端口号。

  

./bin/kafka-console-consumer.sh --bootstrap-server ip:9092  --topic test

且config文件夹下server.properties文件中的一些配置和之前不太一样,需要注意的是,以下两行配置原来是被注解了的,需要在这里取消掉注解,并配置自己的ip。

 

  

listeners = PLAINTEXT://your.host.name:9092advertised.listeners=PLAINTEXT://your.host.name:9092

 

  

springboot、spring-kafka、kafka-client三者兼容性关系

spring官方描述的spring-kafka的版本和kafka-clients的版本对应关系:

 

  官方地址:https://spring.io/projects/spring-kafka

  

 

  中间列:Spring Integration for Apache Kafka Version 可忽略不看:

  也就是说spring-kafka与spring-client是存在在一对多关系的,那是不是他所有的spring-client都可以选呢?

  接着往下看(摘自官网):

  

 

  他说啥 ?

  springboot 1.5 你应该用的是spring-kafka 1.3.x.springboot2.0你应该使用的是spring-kafka2.0.x.如果用的是spring boot2.1.x,那么你必须使用spring-kafka的版本是2.2.x。否则就会出现noClass等等各种异常。spring-kafka的版本是2.1默认使用的spring-client是1.1.x,当你要使用另外两个时,你就要使用如下的版本配置.如果你用的是2.2.x的spring-kafka,只看第一张图,你会以为2.1.x的kafka-clients也可以用。但是spring说了,此时默认用的kafka-clients是2.0.x,如果你想用2.1.x,必须看文档附录,下图的大概意思,必须换掉下图所示的所有依赖版本。

 

  也就是说并不是一对多 他默认的还是只有一个kafka-client来给你的,你要选其他的可以的,你添加一些额外配置

  例如:

  Spring Boot 2.1.0.RELEASE 版本,因此 spring-kafka 的版本为 2.2.0.RELEASE,kafka-clients 的默认版本为2.0.0,所以 kafka 的版本选用为 kafka_2.11-2.1.0 (前面的2.11代表的是Scala的版本后面为kafka的版本号)

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: