SpringBoot整合Kafka

一、首先下载windows版本的Kafka

官网:Apache Kafka

二、启动Kafka

cmd进入到kafka安装目录:

1:cmd启动zookeeer

.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

2:cmd启动kafka server

.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

3:使用cmd窗口启动一个生产者命令:

.\bin\windows\kafka-console-producer.bat --bootstrap-server localhost:9092 --topic Topic1

4:cmd启动zookeeer

.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 -topic Topic1

三、引入kafka依赖

XML 复制代码
       <!--kafka依赖-->
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>

四、配置文件

java 复制代码
server:
    port: 8080

spring:
    application:
        name: kafka-demo
    kafka:
        bootstrap-servers: localhost:9092
        producer: # producer 生产者
            retries: 0 # 重试次数
            acks: 1 # 应答级别:多少个分区副本备份完成时向生产者发送ack确认(可选0、1、all/-1)
            batch-size: 16384 # 批量大小
            buffer-memory: 33554432 # 生产端缓冲区大小
            key-serializer: org.apache.kafka.common.serialization.StringSerializer
            #      value-serializer: com.itheima.demo.config.MySerializer
            value-serializer: org.apache.kafka.common.serialization.StringSerializer

        consumer: # consumer消费者
            group-id: javagroup # 默认的消费组ID
            enable-auto-commit: true # 是否自动提交offset
            auto-commit-interval: 100  # 提交offset延时(接收到消息后多久提交offset)

            # earliest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
            # latest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
            # none:topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常
            auto-offset-reset: earliest
            key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
            #      value-deserializer: com.itheima.demo.config.MyDeserializer
            value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

五、编写生产者发送消息

1:异步发送

java 复制代码
@RestController
@Api(tags = "异步接口")
@RequestMapping("/kafka")
public class KafkaProducer {
    @Resource
    private KafkaTemplate<String, Object> kafkaTemplate;

    @GetMapping("/kafka/test/{msg}")
    public void sendMessage(@PathVariable("msg") String msg) {
        Message message = new Message();
        message.setMessage(msg);
        kafkaTemplate.send("Topic3", JSON.toJSONString(message));
    }
}

1:同步发送

java 复制代码
//测试同步发送与监听
@RestController
@Api(tags = "同步接口")
@RequestMapping("/kafka")
public class AsyncProducer {
    private final static Logger logger = LoggerFactory.getLogger(AsyncProducer.class);
    @Resource
    private KafkaTemplate<String, Object> kafkaTemplate;

    //同步发送
    @GetMapping("/kafka/sync/{msg}")
    public void sync(@PathVariable("msg") String msg) throws Exception {
        Message message = new Message();
        message.setMessage(msg);
        ListenableFuture<SendResult<String, Object>> future = kafkaTemplate.send("Topic3", JSON.toJSONString(message));
        //注意,可以设置等待时间,超出后,不再等候结果
        SendResult<String, Object> result = future.get(3, TimeUnit.SECONDS);
        logger.info("send result:{}",result.getProducerRecord().value());
    }

}

六、消费者编写

java 复制代码
@Component
public class KafkaConsumer {
    private final Logger logger = LoggerFactory.getLogger(KafkaConsumer.class);

    //不指定group,默认取yml里配置的
    @KafkaListener(topics = {"Topic3"})
    public void onMessage1(ConsumerRecord<?, ?> consumerRecord) {
        Optional<?> optional = Optional.ofNullable(consumerRecord.value());
        if (optional.isPresent()) {
            Object msg = optional.get();
            logger.info("message:{}", msg);
        }
    }
}

通过swagger,进行生产者发送消息,观察控制台结果

至此,一个简单的整合就完成了。

后续会持续更新kafka相关内容(多多关注哦!)

相关推荐
kaliarch2 分钟前
Terraform 合并多个项目(独立目录)解决方案
后端·自动化运维
南囝coding5 分钟前
最近Vibe Coding的经验总结
前端·后端·程序员
丘山子19 分钟前
Python 布尔运算的优雅实践
后端·python·面试
汪子熙32 分钟前
理解 SSH Agent 的工作原理与应用场景
后端
苏琢玉42 分钟前
如何优雅地处理多种电商优惠规则?我用 PHP 封装了一个 Promotion Engine
后端·php·composer
豌豆花下猫44 分钟前
Python 潮流周刊#113:用虚拟线程取代 async/await
后端·python·ai
武子康1 小时前
大数据-58 Kafka 消息发送全流程详解:序列化、分区策略与自定义实现
大数据·后端·kafka
福大大架构师每日一题1 小时前
2025-08-02:最多 K 个元素的子数组的最值之和。用go语言,给定一个整数数组 nums 和一个正整数 k,请找出所有长度最多为 k 的连续子数组,计算
后端
Debug笔记1 小时前
你真的理解 Java 中的线程池吗?一次“查不出原因的接口变慢”的真实排查经历
后端
Cache技术分享1 小时前
149. Java Lambda 表达式 - Lambda 表达式的序列化
前端·后端