SpringBoot3.1.7集成Kafka和Kafka安装

一、背景

我们在很多系统开发都需要用到消息中间件,目前来说Kafka凭借其优秀的性能,使得它的使用率已经是名列前茅了,所以今天我们将它应用到我们的系统

二、版本选择

在使用一个中间件一定要考虑版本的兼容性,否则后面会遇到很多问题,首先我们打开Spring的官网:Spring for Apache Kafka

SpringBoot3.1.7 版本对应的Kafka版本是3.3.2~3.6.0

在去官网找一个合适的版本下载安装:Index of /kafka

就选3.5.0 版本吧,

说明:整个版本号 "2.13-3.5.0" 表示 Kafka 版本 3.5.0,使用 Scala 2.13 编写。

下载完成后将其上传到Centos7上的/usr/local 目录下

三、单机模式下安装kafka

1 解压并重命名

bash 复制代码
tar -xzf kafka_2.13-3.5.0.tgz

mv kafka_2.13-3.5.0 kafka

cd kafka

2 使用zookeeper + kafka (不推荐)

Kafka 因为是强依赖zookeeper的,所以必须要先启动zookeeper,不过好在Kafka帮我们把zookeeper的包都准备好了,放在libs目录下面,并且启动脚本也准备好了,我们直接启动就行了

bash 复制代码
# Start the ZooKeeper service
nohup bin/zookeeper-server-start.sh config/zookeeper.properties >zookeeper.log 2>&1 &

看看内存的占用,还好不多,减掉系统本身的内存183,大约只有60M

启动kafka

bash 复制代码
nohup bin/kafka-server-start.sh config/server.properties >kafka.log 2>&1 &

看看Kafka的内存占用,减掉zookeeper和系统本身的内存243,大约占用350M

3 使用 KRaft 模式启动kafka(推荐)

从 Kafka 2.8.0 版本开始,KRaft 模式已经被正式引入,在 KRaft 模式下,ZooKeeper 不再是必需的,既然kafka团队有意要去除对zookeeper的依赖,那我们也顺应趋势,使用KRaft模式启动

1 修改配置

bash 复制代码
vim config/kraft/server.properties

advertised.listeners是 Kafka 代理配置中的一个关键属性,用于告知客户端如何连接到 Kafka 代理。具体而言,它定义了 Kafka 代理向外部公开的网络地址和端口,使得生产者和消费者能够正确建立连接。这里必须填当前虚拟机可以访问的地址

advertised.listeners=PLAINTEXT://192.168.31.114:9092

这里需要改成一个非/tmp路径,防止被系统清理

log.dirs=/usr/local/kafka/datas

2 生成集群ID

bash 复制代码
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"

3 格式化日志

bash 复制代码
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties

执行完后,会在我们前面配置的log.dirs=/usr/local/kafka/datas 位置生成一个目录,这个目录会生成初始化的日志文件(不懂可以先不管他,知道kafka kraft模式启动需要这个就行了)

4 启动kafka

bash 复制代码
nohup bin/kafka-server-start.sh config/kraft/server.properties >out.log 2>&1 &

5 看看内存占用521 ,比使用zookeeper+kafka还是省内存些

4 kafka创建topic

bash 复制代码
bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092

5 查看topic信息

bash 复制代码
bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092

四、集成kafka到SpringBoot项目

1 添加Maven依赖

加入kafka与SpringBoot集成的依赖包(SpringBoot帮我们管理了版本号,所以我们只要加入依赖即可,不需要指定版本号)

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

2 添加配置信息

参考官网:Messaging

复制代码
spring:
  kafka:
    bootstrap-servers: 192.168.31.114:9092
    consumer:
      group-id: myGroup1

3 编写消费者代码

复制代码
创建一个KafkaConsumer类,我们就使用前面创建的topic quickstart-events
java 复制代码
package com.ychen.goodscenter.fafka;

import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

@Component
public class KafkaConsumer {

    @KafkaListener(topics = "quickstart-events")
    public void processMessage(String content) {
        System.out.println("收到kafka消息: " + content);
    }

}

4 编写生产者代码

java 复制代码
package com.ychen.goodscenter.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class KafkaController {
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    @PostMapping("/sendMessage")
    public void sendMessage(@RequestParam(value = "message") String message) {
        kafkaTemplate.send("quickstart-events", message);
    }

}

5 postman 测试

相关推荐
Dola_Pan3 小时前
Linux文件IO(二)-文件操作使用详解
java·linux·服务器
wang_book3 小时前
Gitlab学习(007 gitlab项目操作)
java·运维·git·学习·spring·gitlab
蜗牛^^O^4 小时前
Docker和K8S
java·docker·kubernetes
spiker_4 小时前
RabbitMQ 常见使用模式详解
分布式·rabbitmq
不能再留遗憾了4 小时前
RabbitMQ 高级特性——持久化
分布式·rabbitmq·ruby
成为大佬先秃头4 小时前
解决RabbitMQ设置TTL过期后不进入死信队列
分布式·中间件·rabbitmq·java-rabbitmq
从心归零4 小时前
sshj使用代理连接服务器
java·服务器·sshj
IT毕设梦工厂5 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
Ylucius6 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
七夜zippoe6 小时前
分布式系统实战经验
java·分布式