前言
kafka 作为很火的消息队列,用来处理大量数据状态下的消息队列是很合适的,例如我们的日志处理等。
优点:
- 解耦合
- 异步处理
- 流量削峰
本篇文章主要是对于 快速上手 SpringBoot + Kafka 的搭建,以及可视化工具的使用
1.安装Kafka
1-1.环境
安装的前提需要去安装 jdk1.8+ ,并且配置环境变量
jdk官网下载地址:Java Downloads | Oracle
1-2.下载
官网下载地址:Apache Kafka
我这边下载的版本是:kafka_2.13-3.6.0
1-3.解压
- 解压后创建 data 文件夹,用来存放日志文件
- data文件夹中要区分 kafka 和 zookeeper 的日志数据包
1-3-1.配置文件
在config文件夹下
1-3-1-1.server.properties
1-3-1-1-1.修改 log.dirs 参数
log.dirs=刚才创建的data文件路径(D:/**/kafka/kafka_2.13-3.6.0/data/kafka_log)
1-3-1-1-2.修改 listeners 参数
listeners=PLAINTEXT://127.0.0.1:9092
1-3-1-2.zookeeper.properties
- 修改 dataDir 参数
dataDir=D:/LYJ/kafka/kafka_2.13-3.6.0/data/zk
1-4.启动
注意: 启动 kafka 时候需要先去启动 zookeeper,先后顺序不能错
1-4-1.命令启动
- 在 kafka 安装路径下 cmd 打开命令窗口
- 启动 zookeeper:没有报错就启动成功
call bin/windows/zookeeper-server-start.bat config/zookeeper.properties
- 启动 kafka:
call bin/windows/kafka-server-start.bat config/server.properties
1-4-2.脚本启动
在 kafka 安装路径下新建文件 kfk.cmd 和 zk.cmd
zk.cmd 中存放:
call bin/windows/zookeeper-server-start.bat config/zookeeper.properties
kfk.cmd 中存放:
call bin/windows/kafka-server-start.bat config/server.properties
2.SpringBoot整合
2-1.创建springboot项目
这边根据自己喜好来,我这边创建的是一个cloud项目,可以拆开来创建或者创建在一个项目中都可以。
2-2.导入依赖
<dependencies>
<!-- SpringBoot依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- kafka 依赖 -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.4.4.RELEASE</version>
</dependency>
</dependencies>
2-3.配置 yml 文件
spring:
application:
name: kafka-consumer
kafka:
bootstrap-servers: localhost:9092
producer: #生产者序列化器
retries: 10 #如果发生故障,生产者将尝试重新发送消息的次数。
key-serializer: org.apache.kafka.common.serialization.StringSerializer #序列化生产者消息键的类。
value-serializer: org.apache.kafka.common.serialization.StringSerializer #序列化生产者消息值的类。
ack-mode: manual
consumer: #消费者序列化器
group-id: ${spring.application.name}-test # 消费者组的唯一标识符。在消费者组中的所有消费者将共享消费者组的工作负载。
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer #用于反序列化消费者消息键的类。
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer #用于反序列化消费者消息值的类。
项目既可以是生产者,同时也可以是消费者,根据自己需求来
2-4.编写发送消息接口
@RestController
@RequestMapping("/kafka")
public class ProducerController {
@Resource
private KafkaTemplate<Object, Object> kafkaTemplate;
@GetMapping("/send")
public void sendMsg () {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
String message = "Producer 发送到 Kafka 的消息 --> ";
for (int i = 1;i <= 5;i++) {
kafkaTemplate.send("kafka_text_topic", "发送到Kafka的消息" + i);
System.out.println(message + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
});
thread.start();
System.out.println("kafka消息已开始发送");
}
}
2-5.编写监听类
@Component
public class KafkaCustomer {
/**
* 定义此消费者接收topics = "first"的消息,与controller中的topic对应上即可
* @param record 变量代表消息本身,可以通过ConsumerRecord<?,?>类型的record变量来打印接收的消息的各种信息
*/
@KafkaListener(topics = "kafka_text_topic")
public void userListener(ConsumerRecord<?,?> record) {
System.err.println("topic: " + record.topic()
+ "--> offset:" + record.offset()
+ "msg: " + record.value());
}
}
注意:
1.类上要加 @Component 注解 2.@KafkaListener(topics = "kafka_text_topic") 监听注解主体要与生产者主体一致
2-6.测试运行
生产者:
消费者:
3.offsetexplorer 可视化工具
3-1.安装下载
官网下载地址:Offset Explorer
根据你的电脑选择32为或者64位官网下载的除了配置一下下载地址剩下的可一路下一步到结束
官网下载很慢的小伙伴可再网盘中下载
链接: https://pan.baidu.com/s/15Q-MF7CFq-cwqVd_zlk-yw
提取码: kfk1(下文使用网盘方式安装)
3-2:解压
解压后直接点击 .exe 文件运行
3-3.使用
3-3-1.创建连接
接下来点击 test 测试连接,成功后进行连接
连接成功后就可以看见刚才上面我们代码测试的消息
3-3-2.修改乱码问题
上面的数据我们看到都是字节格式展示的,接下来我们把它改成 string 字符串展示
1.将这两个 key value 给替换掉
2.替换后点击 Update
3.在点回去我们的消息页面data 即可
如果没反应的就惦记运行按钮重新加载一遍
3-3-1.修改所有主体消息数据字符串格式展示
1.右上角点击 Tools -> Settings
2.打开设置后点击 Topice
3.修改 key value
4.重新刷新一下就可以,不行的就退了重新启动一下
结尾
本篇文章呢就到此结束了,本文呢主要针对于没使用过kafka的小伙伴突然临时要去使用一下又不知从何做起的快速上手的小教程,想要学习更深层次的知识,就要多去看官网和扒一下大老们写的文章了。动手试一下比看更有用,小编也是一个菜鸟,有什么不对的地方欢迎各位大佬不吝赐教。