從零開始學Spring Boot系列-整合Kafka

代码匠心發表於2024-03-21

Kafka簡介

Apache Kafka是一個開源的分散式流處理平臺,由LinkedIn公司開發和維護,後來捐贈給了Apache軟體基金會。Kafka主要用於構建實時資料管道和流應用。它類似於一個分散式、高吞吐量的釋出-訂閱訊息系統,可以處理消費者網站的所有動作流資料。這種動作流資料包括頁面瀏覽、搜尋和其他使用者的行動。透過這些資料,Kafka能夠實時地將資料流傳輸到系統和應用上。
Kafka的主要特性包括:

  1. 高吞吐量:Kafka以高吞吐量處理資料,即使是非常大量的資料也能輕鬆應對。
  2. 分散式:Kafka是分散式的,可以在多個節點上執行,從而實現高可用性和容錯性。
  3. 永續性:Kafka將資料持久化到磁碟,因此即使系統崩潰,資料也不會丟失。
  4. 實時性:Kafka可以實時處理資料,為實時分析、監控和報警等應用提供了強大的支援。

Ubuntu安裝Kafka

本文是在wsl2上的Ubuntu 22.04上安裝Kafka。你需要先安裝Java環境,因為Kafka是用Java編寫的。然後,你可以從Apache Kafka的官方網站下載並安裝Kafka。以下是安裝步驟:

  1. 安裝Java環境:你可以使用apt-get命令安裝OpenJDK。

     sudo apt-get update  
     sudo apt-get install openjdk-17-jdk
    
  2. 下載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

  1. 新增依賴:在你的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'
    }
    
  2. 配置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
    
  3. 建立生產者:使用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);
         }
     }
    
  4. 建立消費者:使用@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);
        }
    }
    
  5. 建立控制器: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,你可以透過生產者傳送訊息,並透過消費者接收並處理這些訊息了。
20240321131109
20240321131208

總結

以上就是關於從零開始學Spring Boot系列文章——整合Kafka的簡介。Kafka作為一個強大的分散式流處理平臺,與Spring Boot的整合可以極大地簡化實時資料處理應用的開發。希望這篇文章能幫助你更好地理解Kafka及其在Spring Boot專案中的應用。


我是程式碼匠心,和我一起學習更多精彩知識!!!掃描二維碼!關注我,實時獲取推送。
公眾號
源文來自:https://daimajiangxin.cn

相關文章