一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
前言
在实际编码中,我们使用最多的应该就是 spring-kafka 这个依赖了,引入这个依赖可以让我们使用 KafkaTemplate、@KafkaListener注解、KafkaAdmin 等一系列实用的功能
官网地址:传送门
第一步:部署 Kafka
如果是本地测试和学习实用,Windows 可以直接用脚本启动,内存不够的或者家庭版就别上 Docker 了,Mac 和 Linux 操作系统推荐直接跑 Docker,简单方便,还好管理
在 Windows 运行 Kafka,没什么难度,但是为了避免读者踩坑,我就留个坑好了,下次更新一篇搭建 Kafka 的教程(TODO)
第二步:选择依赖版本
引入依赖前,首先要确定我们的版本依赖关系,而不是盲目的引入最新的依赖,这样做有可能导致项目无法启动
首先参照官网的版本对照表格:Spring for Apache Kafka
按照官方的指导,我们选择了如下的版本进行试验:
- JDK 1.8
- springboot2.6.5
- Kafka 3.1
- spring-kafka 2.8.4
第三步:搭建项目
首先我们需要一个 Maven 项目,直接实用 Spring Initializr 初始化一个项目即可,将 parent 项目的版本设为 2.6.5-SNAPSHOT 即可,如下图所示
同时,在依赖选择页勾选 web 依赖和 spring-kafka 的依赖
然后,我们就可以得到一个创建好的 Spring Boot 项目,我们不需要增加依赖,也不需要指定依赖的版本
第四步:添加配置
将 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 接口,观察控制台输出
Hello Kafka 被成功打印,证明消息消费成功,大功告成,可以愉快的进行其他学习与实验了!
总结
spring-kafka 是项目中使用频率非常高的依赖,不管是为了提升技能也好,还是实际项目需要使用也好,我们都应该好好的学习这个框架的使用,了解它的原理
本文是 Spring-Kafka 框架系列的第一篇,下一篇我会尽快发布,敬请期待