spring boot 整合Kafka

356 阅读1分钟

环境

kafka_2.12-3.2.0、jdk1.8

搭建好kafka集群环境

三台机器,192.168.0.163:9092,192.168.0.216:9092,192.168.0.164:9092,各部署一个kafka实例

创建一个topic

创建一个topic ,一个partition,三个replication


./kafka-topics.sh --bootstrap-server 192.168.0.163:9092 --topic first --create --partitions 1 --replication-factor 3

新建spring boot工程

image.png

导入相关pom

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.6.2</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.hulang</groupId>
   <artifactId>kafka-boot</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>kafka-boot</name>
   <description>kafka-boot</description>
   <properties>
      <java.version>1.8</java.version>
   </properties>
   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
         <version>2.2.4.RELEASE</version>
      </dependency>
      <dependency>
         <groupId>org.apache.kafka</groupId>
         <artifactId>kafka-streams</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.kafka</groupId>
         <artifactId>spring-kafka</artifactId>
      </dependency>
      <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <optional>true</optional>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>org.springframework.kafka</groupId>
         <artifactId>spring-kafka-test</artifactId>
         <scope>test</scope>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
               <excludes>
                  <exclude>
                     <groupId>org.projectlombok</groupId>
                     <artifactId>lombok</artifactId>
                  </exclude>
               </excludes>
            </configuration>
         </plugin>
      </plugins>
   </build>

</project>

主启动类

package com.hulang.kafkaboot;

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

@SpringBootApplication
public class KafkaBootApplication {

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

}

生产者类

package com.hulang.kafkaboot.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.support.SendResult;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProducerController {


    @Autowired
    KafkaTemplate<String,String> kafkaTemplate;

    @RequestMapping("kafka")
    public String data(String msg){
        // 通过kafka发送数据
        ListenableFuture<SendResult<String, String>> first = kafkaTemplate.send("first", msg);
        System.out.printf(first.toString());
        return "ok";
    }


}

消费者类

package com.hulang.kafkaboot.controller;

import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.KafkaListener;

@Configuration
public class KafkaConsumer {

    @KafkaListener(topics = "first")
    public void consumerTopic(String msg){

        System.out.println("接收到消息:"+msg);
    }

}

yml配置

server:
  port: 8877
spring:
  kafka:
    bootstrap-servers: 192.168.0.163:9092,192.168.0.216:9092,192.168.0.164:9092
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer:
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      group-id: 9527