教你如何搞定springboot集成kafka

本文分享自華爲雲社區《手拉手入門springboot+kafka》,作者:QGS。

安裝kafka

啓動Kafka本地環境需Java 8+以上

Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,它可以處理消費者在網站中的所有動作流數據。

Kafka啓動方式有Zookeeper和Kraft,兩種方式只能選擇其中一種啓動,不能同時使用。

Kafka下載https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz

解壓tar -xzf kafka_2.13-3.7.0.tgz

一、Zookeeper啓動Kafka(kafka內置zookeeper)

Kafka依賴Zookeeper

1、啓動Zookeeper 2、啓動Kafka

使用kafka自帶Zookeeper啓動

./zookeeper-server-start.sh ../config/zookeeper.properties &

./zookeeper-server-stop.sh ../config/zookeeper.properties

./kafka-server-start.sh ../config/server.properties &

./kafka-server-stop.sh ../config/server.properties

二、Zookeeper服務器啓動Kafka

Zookeeper服務器安裝

https://zookeeper.apache.org/

https://dlcdn.apache.org/zookeeper/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin.tar.gz

tar zxvf apache-zookeeper-3.9.2-bin.tar.gz

配置Zookeeper服務器

cp zoo_sample.cfg zoo.cfg

啓動Zookeeper服務器

./zkServer.sh start

修改Zookeeper端口

Zoo.cfg添加內容

admin.serverPort=8099

apache-zookeeper-3.9.2-bin/bin目錄下重啓Zookeeper

Zookeeper服務器啓動kafka

/opt/kafka_2.13-3.7.0/bin目錄下

./kafka-server-start.sh ../config/server.properties &

Kafka配置文件server.properties

三、使用KRaft啓動Kafka

UUID通用唯一識別碼(Universally Unique Identifier)

1、生成Cluster UUID(集羣UUID):./kafka-storage.sh random-uuid

2.格式化kafka日誌目錄:./kafka-storage.sh format -t 3pMJGNJcT0uLIBsZhbucjQ -c ../config/kraft/server.properties

3.啓動kafka:./kafka-server-start.sh ../config/kraft/server.properties &

springboot集成kafka

創建topic時,若不指定topic的分區(partition)數量使,則默認爲1個分區(partition)

修改server.properties文件

vim server.properties

listeners=PLAINTEXT://0.0.0.0:9092

advertised.listeners=PLAINTEXT://192.168.68.133:9092

springboot加入依賴kafka

<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>

加入spring-kafka依賴後,springboot自動裝配好kafkaTemplate的Bean

application.yml配置連接kafka

spring:
kafka:
bootstrap-servers: 192.168.68.133:9092

生產者

發送消息

@Resource
private KafkaTemplate<String,String> kafkaTemplate;

@Test
void kafkaSendTest(){
kafkaTemplate.send("kafkamsg01","hello kafka");
}

消費者

接收消息

@Component
public class KafkaConsumer {

@KafkaListener(topics = {"kafkamsg01","test"},groupId = "123")
public void consume(String message){
System.out.println("接收到消息:"+message);
}

}

若沒有配置groupid

Failed to start bean 'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry'; nested exception is java.lang.IllegalStateException: No group.id found in consumer config, container properties, or @KafkaListener annotation; a group.id is required when group management is used.

@Component
public class KafkaConsumer {

@KafkaListener(topics = {"kafkamsg01","test"},groupId = "123")
public void consume(String message){
System.out.println("接收到消息:"+message);
}

}

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章