springboot+kafka简单实战

以下是基于搜索结果整理的 Spring Boot 集成 Kafka 的实战指南,涵盖从环境搭建到代码实现的完整流程:

1. 环境搭建

1.1 添加依赖

pom.xml 文件中添加 Spring Kafka 的依赖:

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

1.2 配置 Kafka

application.propertiesapplication.yml 文件中配置 Kafka 的相关参数:

spring:
  kafka:
    bootstrap-servers: localhost:9092
    consumer:
      group-id: test-consumer-group
      auto-offset-reset: earliest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
demo:
  kafka:
    consumer:
      topic: hello-world
      status: true
      group-id: test-consumer-group

2. 生产者实现

import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * 创建kafka生产者
 */
@Component
public class KafkaProducer {
    @Resource
    private KafkaTemplate<String, String> kafkaTemplate;

    /**
     * 发送消息至指定主题
     * @param topic 主题名称
     * @param key 消息键
     * @param value 消息值
     */
    public void sendMessage(String topic, String key, String value) {
        kafkaTemplate.send(topic, key, value);
    }
}

3. 消费者实现

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

/**
 * 创建kafka消费者
 */
@Slf4j
@Component
@ConditionalOnProperty(name = "demo.kafka.consumer.status", havingValue = "true",matchIfMissing = false)//用于根据配置属性的存在和值来决定是否加载某个Bean或类
public class KafkaConsumer {
    /**
     * 监听指定主题
     * @param message 消息内容
     */
    @KafkaListener(topics = "${demo.kafka.consumer.topic:hello}", groupId = "${demo.kafka.consumer.group:test-consumer-group-1}")
    public void listen(String message) {
        log.info("Received message: " + message);
    }
}

4. 测试

import com.example.springbootkafka.producer.KafkaProducer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@RestController
@RequestMapping("/kafka")
public class KafkaController {
    @Resource
    private KafkaProducer producer;

    @Value("${demo.kafka.consumer.topic:hello}")
    private String TOPIC;

    @GetMapping("/send")
    public String sendMessage(@RequestParam String message) {
        producer.sendMessage(TOPIC, "key", message);
        return "Message sent!";
    }
}

5. 实际应用场景

5.1 日志收集

将应用程序的日志发送到 Kafka,再由其他服务消费并存储到数据库或搜索引擎中。

5.2 事件驱动架构

通过 Kafka 实现微服务之间的异步通信,解耦服务间的依赖。

5.3 实时数据处理

结合流处理框架(如 Kafka Streams 或 Flink)实现实时数据分析。

总结

通过以上步骤,你可以在 Spring Boot 项目中快速集成 Kafka,实现消息的生产与消费功能。Kafka 的异步通信机制能够有效提升系统的性能和可靠性,适用于多种实际应用场景,如日志收集、事件驱动架构和实时数据处理。

posted @ 2025-06-15 12:20  抒写  阅读(340)  评论(0)    收藏  举报