Kafka簡介
Apache Kafka是一個開源的分散式流處理平臺,由LinkedIn公司開發和維護,後來捐贈給了Apache軟體基金會。Kafka主要用於構建實時資料管道和流應用。它類似於一個分散式、高吞吐量的釋出-訂閱訊息系統,可以處理消費者網站的所有動作流資料。這種動作流資料包括頁面瀏覽、搜尋和其他使用者的行動。透過這些資料,Kafka能夠實時地將資料流傳輸到系統和應用上。
Kafka的主要特性包括:
- 高吞吐量:Kafka以高吞吐量處理資料,即使是非常大量的資料也能輕鬆應對。
- 分散式:Kafka是分散式的,可以在多個節點上執行,從而實現高可用性和容錯性。
- 永續性:Kafka將資料持久化到磁碟,因此即使系統崩潰,資料也不會丟失。
- 實時性:Kafka可以實時處理資料,為實時分析、監控和報警等應用提供了強大的支援。
Ubuntu安裝Kafka
本文是在wsl2上的Ubuntu 22.04上安裝Kafka。你需要先安裝Java環境,因為Kafka是用Java編寫的。然後,你可以從Apache Kafka的官方網站下載並安裝Kafka。以下是安裝步驟:
-
安裝Java環境:你可以使用apt-get命令安裝OpenJDK。
sudo apt-get update sudo apt-get install openjdk-17-jdk
-
下載Kafka:從Apache Kafka的官方網站下載適合你作業系統的版本。下載完成後,解壓到指定目錄。
wget https://mirrors.aliyun.com/apache/kafka/3.7.0/kafka_2.13-3.7.0.tgz tar -xzf kafka_2.13-3.7.0.tgz mv kafka_2.13-3.7.0 kafka cd kafka
3.啟動Kafka:Kafka依賴於ZooKeeper,所以你需要先啟動ZooKeeper,然後再啟動Kafka。
# 啟動ZooKeeper
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
# 啟動Kafka
nohup bin/kafka-server-start.sh config/server.properties 2>&1 &
4.使用kafka客戶端連線
Spring Boot整合Kafka
-
新增依賴:在你的Spring Boot專案的build.gradle 檔案中新增Kafka的依賴。
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'mysql:mysql-connector-java:8.0.17' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3' implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.apache.commons:commons-pool2' implementation 'org.springframework.kafka:spring-kafka' }
-
配置Kafka:在application.properties或application.yml檔案中配置Kafka的相關屬性,如broker地址、埠、topic等。
spring.kafka.bootstrap-servers=localhost:9092 spring.kafka.consumer.group-id=my-group spring.kafka.consumer.auto-offset-reset=earliest spring.kafka.template.default-topic=my-topic
-
建立生產者:使用KafkaTemplate傳送訊息到Kafka。
package cn.daimajiangxin.springboot.learning.kafka; import jakarta.annotation.Resource; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Service; @Service public class KafkaProducer { @Resource private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String message) { kafkaTemplate.send("my-topic", message); } }
-
建立消費者:使用@KafkaListener註解監聽Kafka中的訊息。
package cn.daimajiangxin.springboot.learning.kafka; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Service; @Service public class KafkaConsumer { @KafkaListener(topics = "my-topic", groupId = "my-group") public void consume(String message) { System.out.println("Received message: " + message); } }
-
建立控制器:KafkaController
package cn.daimajiangxin.springboot.learning.controller; import cn.daimajiangxin.springboot.learning.kafka.KafkaProducer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class KafkaController { private final KafkaProducer kafkaProducer; @Autowired public KafkaController(KafkaProducer kafkaProducer) { this.kafkaProducer = kafkaProducer; } @GetMapping("/kafka") public void kafka() { kafkaProducer.sendMessage("Hello World"); } }
現在,你的Spring Boot應用已經整合了Kafka,你可以透過生產者傳送訊息,並透過消費者接收並處理這些訊息了。
總結
以上就是關於從零開始學Spring Boot系列文章——整合Kafka的簡介。Kafka作為一個強大的分散式流處理平臺,與Spring Boot的整合可以極大地簡化實時資料處理應用的開發。希望這篇文章能幫助你更好地理解Kafka及其在Spring Boot專案中的應用。
我是程式碼匠心,和我一起學習更多精彩知識!!!掃描二維碼!關注我,實時獲取推送。
源文來自:https://daimajiangxin.cn