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 解压并重命名

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目录下面,并且启动脚本也准备好了,我们直接启动就行了

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

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

启动kafka

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 修改配置

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

KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"

3 格式化日志

bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties

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

4 启动kafka

nohup bin/kafka-server-start.sh config/kraft/server.properties >out.log 2>&1 &

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

4 kafka创建topic

bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092

5 查看topic信息

bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092

四、集成kafka到SpringBoot项目

1 添加Maven依赖

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

		<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
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 编写生产者代码

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 测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/340995.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搜索与图论第五期 拓扑序列

前言 拓扑排序是非常重要的一部分&#xff0c;希望大家都能够手撕代码&#xff01;&#xff01;&#xff01;&#xff08;嘿嘿嘿&#xff09; 一、拓扑排序定义&#xff08;百度须知嘿嘿嘿&#xff09; 拓扑排序 拓扑排序是一种对有向无环图&#xff08;Directed Acyclic Gra…

开始学习vue2基础篇(指令)

一、 内容渲染指令 > {{}} 模板渲染&#xff08;模板引擎&#xff09; 1. {{数据绑定}} 2. {{简单计算}} 3. {{简单逻辑运算}}&#xff08;三元运算&#xff09; 4. {{做简单 js 判断}} 注意&#xff1a;不能写语句、不能解析 html 渲染、不能放在在属性身上 > v-…

菜鸟导入导出assetbundle

因为菜鸟不会用unity c#什么的&#xff0c;所以最后参考贴吧的方法用的是UABE(Unity Assets Bundle Extractor)和UABEA(Unity Assets Bundle Extractor Avalonia) 可以去github上下载 对于txt、xml什么的可以直接改&#xff0c;但是byte文件里还是会有一些类似乱码的东西&…

算法通关村番外篇-面试150题一

大家好我是苏麟 , 今天开始LeetCode面试经典150题 . 大纲 26. 删除有序数组中的重复项80. 删除有序数组中的重复项 II 26. 删除有序数组中的重复项 描述 : 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 …

MIT - 线性代数-LU_LDU分解|单位矩阵

麻省理工学院 - MIT - 线性代数 第四讲 https://www.bilibili.com/video/BV1GD4y1x7Za/?spm_id_from333.1007.top_right_bar_window_history.content.click&vd_source54eff91a9ce326df74fd3b06c9fc2be322情况 老师&#xff0c;没讲明白的LU分解&#xff0c;MIT一张图就解…

【QT+QGIS跨平台编译】之五:【curl+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、curl介绍二、curl下载三、文件分析四、pro文件五、编译实践 一、curl介绍 curl&#xff08;CommandLine Uniform Resource Locator&#xff09;主要功能就是用不同的协议连接和沟通不同的服务器&#xff0c;相当封装了的socket。 libcurl支持http, https, ftp, g…

什么叫单位矩阵?

单位矩阵&#xff08;Identity Matrix&#xff09;是一个特殊的方阵&#xff0c;其主对角线上的元素全为1&#xff0c;而其他元素全为0。单位矩阵通常用符号 I 或 E 表示。 一个nn 的单位矩阵的表示形式如下&#xff1a; 其中&#xff0c;主对角线上的元素全为1&#xff0c;…

http网络编程——在ue5中实现文件传输功能

http网络编程在ue5中实现 需求&#xff1a;在unreal中实现下载功能&#xff0c;输入相关url网址&#xff0c;本地文件夹存入相应文件。 一、代码示例 1.Build.cs需要新增Http模块&#xff0c;样例如下。 PublicDependencyModuleNames.AddRange(new string[] { "Core&q…

matlab 交通流量PI和P控制

1、内容简介 略 37-可以交流、咨询、答疑 2、内容说明 略. 题目背景 有一条路&#xff0c;他有一个主干道和一个次干道&#xff0c;现在这条路上有一定的交通流&#xff0c;交通流的情况是第二张图(交通流的程序在那个matlab文件里的做出的figure1里有&#xff09;&#x…

【vue3】GSAP在vue中的使用

一、获取GSAP npm install gsap 二、开始GSAP 导入GSAP&#xff0c;如果需要导入gsap的插件可以参考这里。 import gasp from gsap; 这里用的是选项式&#xff0c;在methods属性中创建一个方法用来写gsap的动画。 gasp_animation(){let tl gasp.timeline({defaults:{ ease:&…

win10 任务栏设置透明

先看效果图 第一步&#xff1a;按下“Win R”组合键&#xff0c;输入“regedit”并回车&#xff0c;打开注册表编辑器。 第二步&#xff1a;在注册表中找到路径“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced”。 第三步&#xff1a;在…

1 认识微服务

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff1a;将业务的所有…

yolov5 opencv dnn部署 github代码

yolov5 opencv dnn部署 github代码 源码地址实现推理源码中作者的yolov5s.onnx推理条件python部署(因为python比较简单就直接介绍了)c部署 参考链接 源码地址 yolov5官网还提供的dnn、tensorrt推理链接本人使用的opencv c github代码,代码作者非本人&#xff0c;也是上面作者推…

数组(java)

数组动态初始化和静态初始化的区别&#xff1a; 动态初始化&#xff1a;手动指定数组长度&#xff0c;由系统给出默认初始化值 只明确元素个数&#xff0c;不明确具体数值&#xff0c;推荐使用动态初始化 静态初始化&#xff1a;手动指定数组元素&#xff0c;系统会根据元素…

第二百八十二回

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择图片和视频文件"相关的内容&#xff0c;本章回中将介绍如何混合选择多个图片和视频文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1…

Java 设计者模式以及与Spring关系(四) 代理模式

目录 简介: 23设计者模式以及重点模式 代理模式&#xff08;Proxy Pattern&#xff09; 静态代理示例 spring中应用 动态代理 1.基于JDK的动态代理 target.getClass().getInterfaces()作用 内名内部类写法(更简洁&#xff0c;但不推荐) 2.基于CGLIB实现 spring中应用 …

【代码随想录算法训练营第二十七天|39. 组合总和、40.组合总和II、131.分割回文串】

代码随想录算法训练营第二十七天|39. 组合总和、40.组合总和II、131.分割回文串 39. 组合总和40.组合总和II131.分割回文串 题解参考y总的&#xff1a;http://www.acwing.com 39. 组合总和 我是一看就会&#xff0c;一写就废。先看代码&#xff1a; class Solution { public:…

Databend 开源周报第 129 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持标准流 标…

Redis相关面试题大全

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于java面试题系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基…

SD-WAN如何解决网络质量问题?

当选择的线路面临故障、质量下降或拥塞时怎么办&#xff1f;SD-WAN采用智能选路策略&#xff0c;灵活应对各种场景&#xff0c;通过先进的线路切换机制和隧道内流控技术&#xff0c;为用户提供最佳的业务体验。下文将对SD-WAN的线路切换和隧道内流控进行介绍&#xff0c;帮助大…