spring boot 项目使用kafka学习笔记

#Kafka的安装以及配置,本文是自己学习备用,有不足的地方请到网上寻找其他方法。


wget http://mirror.bit.edu.cn/apache/kafka/0.11.0.0/kafka_2.11-0.11.0.0.tgz


2.安装

tar xzvf kafka_2.11-0.11.0.0.tgz -C /usr/local/


3.配置(服务器在阿里云ECS上)

vi %kafka_home%/server.properties

############################# Server Basics #############################
broker.id=0
port=9092
host.name=阿里云内网ip
advertised.host.name=阿里云外网ip
delete.topic.enable=true

…其他的配置不变

二Spring boot操作Kafka

1、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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.zhisheng</groupId>
	<artifactId>kafka-learning</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>kafka-learning</name>
	<description>Demo project for Spring Boot + kafka</description>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.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-web</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</artifactId>
            <version>1.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>
    </dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

主要引入了 spring-kafka 、lombok 、 gson 依赖。
再看一下对应的配置文件:

spring.application.name=kafka-user
server.port=8080
#============== kafka ===================
# 指定kafka 代理地址,可以多个
spring.kafka.bootstrap-servers=localhost:9092
 
#=============== provider  =======================
spring.kafka.producer.retries=0
# 每次批量发送消息的数量
spring.kafka.producer.batch-size=16384
spring.kafka.producer.buffer-memory=33554432
 
# 指定消息key和消息体的编解码方式
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
 
#=============== consumer  =======================
# 指定默认消费者group id
spring.kafka.consumer.group-id=user-log-group
 
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.auto-commit-interval=100
 
# 指定消息key和消息体的编解码方式
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

yml配置文件,本例为kafka节点集群

spring:
  kafka:
    bootstrap-servers: http://master:9092,http://worker1:9092,http://worker2:9092
    producer:
      retries: 0
      batch-size: 16384
      buffer-memory: 33554432
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer

message消息实体类

代码如下(示例):

 @Data
  public class Message {
    
    
      private Long id;    //id
      private String msg; //消息
      private Date sendTime;  //时间戳
  }

生产者

 @Component
  @Slf4j
  public class KafkaProducer {
    
    
  ​
      @Autowired
      private KafkaTemplate<String, String> kafkaTemplate;
  ​
      private Gson gson = new GsonBuilder().create();//发送消息方法
      public void send() {
    
    
          Message message = new Message();
          message.setId(System.currentTimeMillis());
          message.setMsg(UUID.randomUUID().toString());
          message.setSendTime(new Date());
          log.info("+++++++++++++++++++++  message = {}", gson.toJson(message));
          //topic-ideal为主题
          kafkaTemplate.send("topic-ideal", gson.toJson(message));
      }
  }

测试类,运行kafkaProducer方法即可

 @RunWith(SpringRunner.class)
  @SpringBootTest
  public class KafkaProducerApplicationTests {
    
    
  ​
      @Autowired
      private KafkaProducer kafkaProducer;
  ​
      @Test
      public void kafkaProducer(){
    
    
          this.kafkaProducer.send();
      }
  ​
      @Test
      public void contextLoads() {
    
    
      }}

消费者类

@Component
  @Slf4j
  public class KafkaConsumer {
    
    
  ​
      @KafkaListener(topics = {
    
    "topic-ideal"})
      public void consumer(ConsumerRecord<?, ?> record){
    
    
          Optional<?> kafkaMessage = Optional.ofNullable(record.value());
          if (kafkaMessage.isPresent()) {
    
    
              Object message = kafkaMessage.get();
              log.info("----------------- record =" + record);
              log.info("------------------ message =" + message);
          }
      }
  }

猜你喜欢

转载自blog.csdn.net/Wyangcsdb/article/details/113251551