SpringBoot整合SpringKafka實現消費者史上最簡代碼實現


這是消費端的源碼:https://github.com/xuebus/springkafkaconsumer

生產端的代碼請求看另一篇博客:https://www.cnblogs.com/jun1019/p/7895746.html

該項目是使用的技術:SpringBoot  + SpringKafka + Maven

先看pom.xml文件中引入的依賴:

<?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>

    <groupId>com.xuebusi.consumer</groupId>
    <artifactId>consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springkafkaconsumer</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <version>1.0.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

 

注意:這里我使用的spring-kafka(它包裝了apache的kafka-client)的依賴包版本是 1.0.6.RELEASE, 是因為我Linux服務器上部署的kafka服務器的版本是kafka_2.10-0.9.0.1,使用的kafka的時候要注意,kafka客戶端(kafka-client)的版本要和kafka服務器的版本一一對應,否則,消息會消費失敗。

Spring官方網站上給出了SpringKafka和kafka-client版本(它的版本號要和kafka服務器的版本保持一致)的對應關系:

https://projects.spring.io/spring-kafka/

 

下面是消費者的配置文件,既然使用的是SpringBoot,配置文件就是 application.yml

server:
  port: 8082 spring:
  kafka:
    consumer:
      enable-auto-commit: true       group-id: applog
      auto-offset-reset: latest
      bootstrap-servers: 192.168.71.11:9092,192.168.71.12:9092,192.168.71.13:9092

 

在上面的配置中,我們給消費者分配的端口號是8082,服務器有3台,分別對應3個ip地址和端口。 並配置了kafka服務器的ip地址;

enable-auto-commit: true //指定消息被消費之后自動提交偏移量(即消息的編號,表示消費到了哪個位置,消費者每消費完一條消息就會向kafka服務器匯報自己消消費到的那個消息的編號,以便於下次繼續消費)。
group-id: applog //消費者組
auto-offset-reset: latest //從最近的地方開始消費

想了解關於kafka消費者相關的更多配置的話,可以自行查閱相關資料進行學習。

 

下面是kafka消費者的核心代碼,實現了消息的消費邏輯:

package com.xuebusi.consumer;

import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

/**
 * 消費者
 * 使用@KafkaListener注解,可以指定:主題,分區,消費組
 */
@Component
public class KafkaConsumer {

    @KafkaListener(topics = {"app_log"})
    public void receive(String message){
        System.out.println("app_log--消費消息:" + message);
    }
}

 

在上面的代碼中,負責消費消息的關鍵之處就是SpringKafka提供的@KafkaListener注解,在方法上使用該注解,並指定要消費的topic(也可以指定消費組以及分區號,支持正則表達式匹配),這樣,消費者一旦啟動,就會監聽kafka服務器上的topic,實時進行消費消息。當然,我們可以在該類中定義多個不同的方法,並都在方法上使用 @KafkaListener ,為它指定不同的topic及分區信息,這樣每個方法就相當於一個消費者了。

 

下面就啟動SpringBoot項目測試:

package com.xuebusi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringkafkaconsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringkafkaconsumerApplication.class, args);
    }
}

 

使用鼠標右鍵運行main方法即可啟動SpringBoot項目,在控制台你會看到消費者會成功連接到kafka服務器,並打印出消費者的參數配置信息以及消費者和topic分區的分配信息,消費者一旦發現要消費的topic中有新的消息,就會立即進行消費。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM