本文分享自華爲雲社區《手拉手入門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); } }