「Kafka 系列(三)」- spring-kafka 入门实战

605 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

前言

在实际编码中,我们使用最多的应该就是 spring-kafka 这个依赖了,引入这个依赖可以让我们使用 KafkaTemplate、@KafkaListener注解、KafkaAdmin 等一系列实用的功能

官网地址:传送门

第一步:部署 Kafka

如果是本地测试和学习实用,Windows 可以直接用脚本启动,内存不够的或者家庭版就别上 Docker 了,Mac 和 Linux 操作系统推荐直接跑 Docker,简单方便,还好管理

在 Windows 运行 Kafka,没什么难度,但是为了避免读者踩坑,我就留个坑好了,下次更新一篇搭建 Kafka 的教程(TODO)

第二步:选择依赖版本

引入依赖前,首先要确定我们的版本依赖关系,而不是盲目的引入最新的依赖,这样做有可能导致项目无法启动

首先参照官网的版本对照表格:Spring for Apache Kafka

image.png

按照官方的指导,我们选择了如下的版本进行试验:

  • JDK 1.8
  • springboot2.6.5
  • Kafka 3.1
  • spring-kafka 2.8.4

第三步:搭建项目

首先我们需要一个 Maven 项目,直接实用 Spring Initializr 初始化一个项目即可,将 parent 项目的版本设为 2.6.5-SNAPSHOT 即可,如下图所示

image.png 同时,在依赖选择页勾选 web 依赖和 spring-kafka 的依赖

然后,我们就可以得到一个创建好的 Spring Boot 项目,我们不需要增加依赖,也不需要指定依赖的版本

image.png

第四步:添加配置

将 application.properties 改成 application.yml 文件,这是个人习惯,喜欢 properties 格式配置的也可以不改

添加如下配置:

spring:
  kafka:
    bootstrap-servers: localhost:9092
    # 配置消费者
    consumer:
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
    # 配置生产者
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer

此时项目就简单的配置好了,可以尝试运行一下是否能正常启动,目前为止一切顺利,我在本地正常启动项目

第五步:生产者和消费者

接下来,我们配置一个生产者,一个消费者,通过接口调用,给 Topic 发送消息,消费者监听对应 Topic,自动拉取消息进行消费

Produicer.class

import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;

@RestController
public class Producer {
    @Resource
    KafkaTemplate<String, String> kafkaTemplate;

    @GetMapping("/send")
    public void sendMessage() {
        kafkaTemplate.send("topic-01", "Hello Kafka!");
    }
}

Consumer.class

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

@Component
public class Consumer {
    @KafkaListener(topics = {"topic-01"}, groupId = "group1")
    public void consumerMessage(ConsumerRecord<String, String> consumerRecord) {
        System.out.println(consumerRecord.value());
    }
}

第六步:启动项目 测试

启动项目,调用 http://localhost:8001/send 接口,观察控制台输出

image.png

Hello Kafka 被成功打印,证明消息消费成功,大功告成,可以愉快的进行其他学习与实验了!

总结

spring-kafka 是项目中使用频率非常高的依赖,不管是为了提升技能也好,还是实际项目需要使用也好,我们都应该好好的学习这个框架的使用,了解它的原理

本文是 Spring-Kafka 框架系列的第一篇,下一篇我会尽快发布,敬请期待