欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

被kafka-client和springkafka版本坑到自閉及解決

 更新時(shí)間:2022年03月26日 10:22:13   作者:追月亮的猴子  
這篇文章主要介紹了被kafka-client和springkafka版本坑到自閉及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

被kafka-client和springkafka版本坑

上周剛剛歡天喜地的在linux上部了kafka,這周打算用spring-boot框架寫(xiě)個(gè)簡(jiǎn)單demo跑一下,結(jié)果悲劇就此展開(kāi)。

首先建立maven工程:pom中添加spring boot kafka依賴(lài):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ?xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
? ?<modelVersion>4.0.0</modelVersion>
? ?<parent>
? ? ? <groupId>org.springframework.boot</groupId>
? ? ? <artifactId>spring-boot-starter-parent</artifactId>
? ? ? <version>2.1.5.RELEASE</version>
? ? ? <relativePath/> <!-- lookup parent from repository -->
? ?</parent>
? ?<groupId>com.example</groupId>
? ?<artifactId>kafkaproducer</artifactId>
? ?<version>0.0.1-SNAPSHOT</version>
? ?<name>kafkaproducer</name>
? ?<description>Demo project for Spring Boot</description>
?
? ?<properties>
? ? ? <java.version>1.8</java.version>
? ?</properties>
?
? ?<dependencies>
? ? ? <dependency>
? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId>
? ? ? </dependency>
?
? ? ? <dependency>
? ? ? ? ?<groupId>org.projectlombok</groupId>
? ? ? ? ?<artifactId>lombok</artifactId>
? ? ? ? ?<optional>true</optional>
? ? ? </dependency>
? ? ? <dependency>
? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ?<artifactId>spring-boot-starter-test</artifactId>
? ? ? ? ?<scope>test</scope>
? ? ? </dependency>
? ? ? <dependency>
? ? ? ? ?<groupId>org.springframework.kafka</groupId>
? ? ? ? ?<artifactId>spring-kafka</artifactId>
? ? ? </dependency>
? ?</dependencies>
?
? ?<build>
? ? ? <plugins>
? ? ? ? ?<plugin>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-maven-plugin</artifactId>
? ? ? ? ?</plugin>
? ? ? </plugins>
? ?</build>
?
?
</project>

配置文件如下:

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

然后新建一個(gè)Producer類(lèi)

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

在test類(lèi)中調(diào)用

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)
@SpringBootTest
public class KafkaproducerApplicationTests {?
? ?@Autowired KafkaProducer kafkaProducer;?
? ?@Test
? ?public void contextLoads() {
? ? ? kafkaProducer.produce();
? ?}?
}

然后控制臺(tái)就會(huì)打印一個(gè)莫名奇妙的錯(cuò)誤,沒(méi)有打印任何堆棧信息,大概意思只是表達(dá)了連接不上。

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

telnet ip+port 是可以通的

隨后發(fā)現(xiàn),xshell上啟動(dòng)的kafka-server在報(bào)這樣一個(gè)錯(cuò),更詳細(xì)的沒(méi)有留存。

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依賴(lài)不匹配造成的,于是查看對(duì)應(yīng)關(guān)系。

查看kafka,發(fā)現(xiàn)裝的是一個(gè)0.8.2.1 版本的kafka,該版本的kafka是2015年3月發(fā)布的版本,可以說(shuō)是十分古老,真是不知道為什么當(dāng)初要選這么老的版本。

換了幾次spring-kafka的pom之后,依然在報(bào)這個(gè)問(wèn)題,于是我選擇換更新的kafka的包。

換了2.2.0版本kafka的包,問(wèn)題得到解決。

其中consumer的創(chuàng)建命令和老版本的不太一樣,且consumer和producer需使用相同的端口號(hào),而不是像之前producer配置為broker的端口,consumer配置為zookeeper的端口號(hào)。

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

且config文件夾下server.properties文件中的一些配置和之前不太一樣,需要注意的是,以下兩行配置原來(lái)是被注解了的,需要在這里取消掉注解,并配置自己的ip。

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

springboot、spring-kafka、kafka-client三者兼容性關(guān)系

spring官方描述的spring-kafka的版本和kafka-clients的版本對(duì)應(yīng)關(guān)系:

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

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

也就是說(shuō)spring-kafka與spring-client是存在在一對(duì)多關(guān)系的,那是不是他所有的spring-client都可以選呢?

接著往下看(摘自官網(wǎng)):

他說(shuō)啥 ?

  • springboot 1.5 你應(yīng)該用的是spring-kafka 1.3.x.
  • springboot2.0你應(yīng)該使用的是spring-kafka2.0.x.
  • 如果用的是spring boot2.1.x,那么你必須使用spring-kafka的版本是2.2.x。否則就會(huì)出現(xiàn)noClass等等各種異常。
  • spring-kafka的版本是2.1默認(rèn)使用的spring-client是1.1.x,當(dāng)你要使用另外兩個(gè)時(shí),你就要使用如下的版本配置.
  • 如果你用的是2.2.x的spring-kafka,只看第一張圖,你會(huì)以為2.1.x的kafka-clients也可以用。但是spring說(shuō)了,此時(shí)默認(rèn)用的kafka-clients是2.0.x,如果你想用2.1.x,必須看文檔附錄,下圖的大概意思,必須換掉下圖所示的所有依賴(lài)版本。

也就是說(shuō)并不是一對(duì)多 他默認(rèn)的還是只有一個(gè)kafka-client來(lái)給你的,你要選其他的可以的,你添加一些額外配置

例如:

 Spring Boot 2.1.0.RELEASE 版本,因此 spring-kafka 的版本為 2.2.0.RELEASE,kafka-clients 的默認(rèn)版本為2.0.0,所以 kafka 的版本選用為 kafka_2.11-2.1.0 (前面的2.11代表的是Scala的版本后面為kafka的版本號(hào))

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中的Semaphore源碼分析

    Java中的Semaphore源碼分析

    這篇文章主要介紹了Java中的Semaphore源碼分析,Semaphore是一個(gè)訪問(wèn)公共資源的線程數(shù)量如限流、停車(chē)等,它是一個(gè)基于AQS實(shí)現(xiàn)的共享鎖,主要是通過(guò)控制state變量來(lái)實(shí)現(xiàn),需要的朋友可以參考下
    2023-11-11
  • java獲取文件的inode標(biāo)識(shí)符的方法

    java獲取文件的inode標(biāo)識(shí)符的方法

    這篇文章主要介紹了java獲取文件的inode標(biāo)識(shí)符,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • springboot整合curator實(shí)現(xiàn)分布式鎖過(guò)程

    springboot整合curator實(shí)現(xiàn)分布式鎖過(guò)程

    這篇文章主要介紹了springboot整合curator實(shí)現(xiàn)分布式鎖過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • java如何實(shí)現(xiàn)自動(dòng)生成數(shù)據(jù)庫(kù)設(shè)計(jì)文檔

    java如何實(shí)現(xiàn)自動(dòng)生成數(shù)據(jù)庫(kù)設(shè)計(jì)文檔

    以前我們還需要手寫(xiě)數(shù)據(jù)庫(kù)設(shè)計(jì)文檔、現(xiàn)在可以通過(guò)引入screw核心包來(lái)實(shí)現(xiàn)Java?數(shù)據(jù)庫(kù)文檔一鍵生成。本文將具體介紹一下如何通過(guò)java自動(dòng)生成數(shù)據(jù)庫(kù)設(shè)計(jì)文檔,需要的朋友可以參考下
    2021-11-11
  • Java簡(jiǎn)單從文件讀取和輸出的實(shí)例

    Java簡(jiǎn)單從文件讀取和輸出的實(shí)例

    下面小編就為大家?guī)?lái)一篇Java簡(jiǎn)單從文件讀取和輸出的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • springmvc整合ssm配置的詳細(xì)代碼

    springmvc整合ssm配置的詳細(xì)代碼

    今天通過(guò)實(shí)例代碼給大家介紹了springmvc整合ssm配置的詳細(xì)方法,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-11-11
  • 解析如何用兩個(gè)棧來(lái)實(shí)現(xiàn)隊(duì)列的方法

    解析如何用兩個(gè)棧來(lái)實(shí)現(xiàn)隊(duì)列的方法

    本篇文章是對(duì)如何用兩個(gè)棧實(shí)現(xiàn)隊(duì)列的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Java 替換word文檔文字并指定位置插入圖片

    Java 替換word文檔文字并指定位置插入圖片

    這篇文章主要介紹了Java 替換word文檔文字,指定位置插入圖片功能,本文通過(guò)實(shí)例代碼給大家講解,需要的朋友可以參考下
    2018-02-02
  • Java調(diào)用Windows的DOS命令的方法

    Java調(diào)用Windows的DOS命令的方法

    這篇文章主要介紹了Java調(diào)用Windows的DOS命令的方法,其主要內(nèi)容思路是實(shí)現(xiàn)調(diào)用Windows的ipconfig命令,然后將輸出的信息通過(guò)IO流輸出到控制臺(tái)。有需要的小伙伴參考下
    2015-02-02
  • Spring實(shí)現(xiàn)擁有者權(quán)限驗(yàn)證的方法示例

    Spring實(shí)現(xiàn)擁有者權(quán)限驗(yàn)證的方法示例

    這篇文章主要介紹了Spring實(shí)現(xiàn)擁有者權(quán)限驗(yàn)證的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論