消息中间件-Kafka2-3.9.0源码构建

消息中间件-Kafka2-3.9.0源码构建

1、软件环境

  • JDK Version 1.8
  • Scala Version 2.12.0
  • Kafka-3.9.0 源码包
    下载地址:https://downloads.apache.org/kafka/3.9.0/kafka-3.9.0-src.tgz
  • Gradle Version >= 8.8
  • Apache Zookeeper 3.7.0

2、源码编译

  1. 打开源码根目录
  2. 修改build.gradle 文件, 添加阿里云仓库
    在这里插入图片描述
    在这里插入图片描述
  3. 在源码根目录下执行编译命令
    编译IDEA项目执行: gradle idea
    编译Eclipse项目执行: gradle eclipse

3、源码构建成功

  • 源码构建时间, 需要耐心等待,大概10分钟左右
  • 构建过程中出现无法下载包的情况,可能是网络较慢, 多次执行步骤2-3即可
  • 源码构建成功标志
    在这里插入图片描述
    4、源码导入
    将源码导入IDEA或Eclipse中, IDEA或Eclipse需要安装scala插件,否则项目无法识别。不要使用File->Open 要选择 File ->Project from Existing sources , 如果没有这个选项 则选择New -> Project from Existing sources -> import gradle 将项目导入。 导入后打开Setting配置,修改gradle配置,如下图
    在这里插入图片描述
    修改scala配置, 如下图
    在这里插入图片描述
    点击ok即可, 等待项目编译。
    在这里插入图片描述
    导入成功.
    5、配置、启动Kafka
    在Kafka服务端使用log4j输出日志,启动前需要在core/src/main下创建resources目录,将config目录下的log4j.properties 文件复制到此文件夹中,并在build.gradle文件中添加log4j的依赖,完成上述操作运行,才不会出现日志无法加载的错误。
    在这里插入图片描述

server.properties是Kafka的主要配置文件,下面简单介绍其中的相关配置项的含义。必须修改的配置项就是log.dirs,其他配置可以根据需求自行修改。在根目录下创建logs目录,让后将配置文件中的日志目录指向该目录。
在这里插入图片描述
server.properties文件参数说明

# 每一个Broker在集群中的唯一标识。即使BrokerIP地址发生了变化,broker.id只要没变,则不会影响consumers的消息情况
broker.id=0

# 是否允许Topic被删除。如果是false,使用管理员工具删除Topic的时候,Kafka并不会处理此操作
# delete.topic.enable=true

# Kafka服务端是否可以根据请求自动创建Topic,默认是true。如果打开此选项,下面三种请求会触发Topic自动创建:
# ①Producer向某个不存在的Topic写入消息
# ②Consumer从某个不存在的Topic读取消息
# ③Consumer从某个不存在的Topic读取消息
# 建议将此选项设置为false,并在使用Topic之前手动创建
# auto.create.topics.enable=true

# Kafka Server使用的协议、主机名以及端口的格式如下:
# listeners = security_protocol://host_name:port
# 参考示例:
# listeners = PLAINTEXT://your.host.name:9092
#listeners=PLAINTEXT://:9092 #这是默认配置,使用PLAINTEXT,端口是9092

# 接收请求的线程数
num.network.threads=3

# 执行请求的线程数
num.io.threads=8

# 每个TCP socket在内核中都有一个发送缓冲区(SO_SNDBUF)和一个接收缓冲区(SO_RCVBUF)。接收缓冲区把数据缓存入内核,应用进程一直没有调用read进行读取的话,此数据会一直缓存在相应socket的接收缓冲区内。再啰嗦一点,不管进程是否读取socket,对端发来的数据都会经由内核接收并且缓存到socket的内核接收缓冲区之中。read所做的工作,就是把内核缓冲区中的数据复制到应用层用户的buffer里面,仅此而已。进程调用send发送的数据的时候,一般情况下,将数据复制进入socket的内核发送缓冲区之中,然后send便会在上层返回。换句话说,send返回之时,数据不一定会发送到对端去,send仅仅是把应用层buffer的数据复制进socket的内核发送buffer中TCP连接的SO_SNDBUF缓冲区大小,默认102400,单位是字节如果是-1,就使用操作系统的默认值
socket.send.buffer.bytes=102400

# TCP连接的SO_RCVBUF缓冲区大小,默认102400,单位是字节如果是-1,就使用操作系统的默认值
socket.receive.buffer.bytes=102400

# 请求的最大长度
socket.request.max.bytes=104857600

# 用于存储log文件的目录,可以将多个目录通过逗号分隔,形成一个目录列表
log.dirs=/tmp/kafka-logs

# 每个Topic默认的partition数量,默认值是1
num.partitions=1

# 用来恢复log文件以及关闭时将log数据刷新到磁盘的线程数量,每个目录对应num.recovery.threads.per.data.dir个线程
num.recovery.threads.per.data.dir=1

# 每隔多少个消息触发一次flush操作,将内存中的消息刷新到硬盘上
#log.flush.interval.messages=10000

# 每隔多少毫秒触发一次flush操作,将内存中的消息刷新到硬盘上
#log.flush.interval.ms=1000

# 上面这两个配置是全局的,可以在Topic中重新设置,并覆盖这两个配置
# 下面有两种配置,一种是基于时间的策略,另一种是基于日志文件大小的策略,两种策略同是配置的话,只要满足其中一种策略,则触发Log删除的操作。删除操作总是先删除最旧的日志

# 消息在Kafka中保存的时间,168小时之前的log,可以被删除掉
log.retention.hours=168

# 当剩余空间低于log.retention.bytes字节,则开始删除log
#log.retention.bytes=1073741824

# segment日志文件大小的上限值。当超过这个值时,会创建新的segment日志文件
log.segment.bytes=1073741824

# 每隔300000ms,logcleaner线程将检查一次,看是否符合上述保留策略的消息可以被删除
log.retention.check.interval.ms=300000

# Kafka依赖的ZooKeeper集群地址,可以配置多个ZooKeeper地址,使用逗号隔开
zookeeper.connect=localhost:2181

# ZooKeeper连接的超时时间
zookeeper.connection.timeout.ms=6000

设置Kafka的启动参数,Kafka服务端的入口类是kafka.Kafka.scala
在这里插入图片描述
除了指定入口类,还需要指定server.properties配置文件所在的位置,即在Kafka源代码的config目录下,并设置运行配置
在这里插入图片描述
由于kafka依赖Zookeeper, 因此需要先将本地的zookeeper启动起来,默认端口2181
在这里插入图片描述
最后启动Kafka,启动完成
在这里插入图片描述

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

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

相关文章

修复docker启动失败:Failed to start Docker Application Container Engine

配置了镜像源之后,运行sudo systemctl restart docker.service失败,提示让运行systemctl status docker.service或journalctl -xeu docker.service查看详细信息。 运行后者发现有如下日志: 红色区域是我设置的一个镜像源这个日志的意思就是…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-43

文件下载与邀请翻译者 学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么&#xff…

遗传算法与深度学习实战(26)——编码卷积神经网络架构

遗传算法与深度学习实战(26)——编码卷积神经网络架构 0. 前言1. EvoCNN 原理1.1 工作原理1.2 基因编码 2. 编码卷积神经网络架构小结系列链接 0. 前言 我们已经学习了如何构建卷积神经网络 (Convolutional Neural Network, CNN),在本节中&a…

react 路由鉴权

权限路由一般两种 1中接口中返回菜单 2 接口中返回权限,前端做匹配 一般都是那种结合,react中没有vue那种钩子函数如何做? 在项目中写一个高阶函数,在高阶函数中判断权限、是否登录等操作app.tsx或者man.tsx中使用 《AuthRouter》…

Ansys Maxwell:电机中的磁芯和磁体损耗

了解磁体中的涡流损耗和电动机叠片中的磁芯损耗 磁体中的涡流损耗会影响电动机的效率和热性能。当交变磁场在导电材料(例如电动机中使用的磁铁)内感应出电流回路时,就会发生这种现象。这些电流会产生热量,导致效率降低和磁热点。…

EtherCAT转ProfiNet网关实现西门子1200PLC与伺服电机连接的通讯案例

一. 案例背景 西门子1200PLC通过捷米特JM-ECTM-PN(EtherCAT转ProfiNet)网关将松下伺服电机(包括不限于型号MHMFO22D1U2M)或EtherCAT协议的其它设备或连接到ProfiNetPLC上,并在正常运行中支持EtherCAT协议。本产品可作为EtherCAT主站,做为西门子S7-1200系…

在 MacOS 上为 LM Studio 更换镜像源

在 MacOS 之中使用 LM Studio 部署本地 LLM时,用户可能会遇到无法下载模型的问题。 一般的解决方法是在 huggingface.co 或者国内的镜像站 hf-mirror.com 的项目介绍卡页面下载模型后拖入 LM Studio 的模型文件夹。这样无法利用 LM Studio 本身的搜索功能。 本文将…

AI开发:用模型来识别手写数字的完整教程含源码 - Python 机器学习

今天一起来学习scikit-learn 。 scikit-learn 是一个强大的 Python 机器学习库,提供多种分类、回归、聚类算法,适用于从数据预处理到模型评估的全流程。它支持简单一致的 API,适合快速构建和测试模型。 官方地址在这里,记得Mark…

快速上手 RabbitMQ:使用 Docker 轻松搭建消息队列系统

在现代的分布式系统中,消息队列(Message Queue)是实现异步通信、解耦系统组件、提高系统可扩展性和可靠性的重要工具。RabbitMQ 是一个广泛使用的开源消息代理软件,它实现了高级消息队列协议(AMQP)&#xf…

任务管理法宝:甘特图详解

在项目管理中,如何清晰、直观地展示项目的进度和任务分配? 甘特图作为一种经典的项目管理工具,提供了有效的解决方案。无论是团队合作还是个人项目管理,甘特图都能帮助你轻松追踪各项任务的进展。今天,我们将详细介绍…

Keil5配色方案修改为类似VSCode配色

1. 为什么修改Keil5配色方案 视觉习惯:如果你已经习惯了VSCode的配色方案,尤其是在使用ESP-IDF开发ESP32时,Keil5的默认配色可能会让你感到不习惯。减少视觉疲劳:Keil5的默认背景可能过于明亮,长时间使用可能会导致视…

电子病历静态数据脱敏路径探索

一、引言 数据脱敏(Data Masking),屏蔽敏感数据,对某些敏感信息(比如patient_name、ip_no、ad、no、icd11、drug等等 )通过脱敏规则进行数据的变形,实现隐私数据的可靠保护。电子病历作为医疗领…

【Linux | 计网】TCP协议深度解析:从连接管理到流量控制与滑动窗口

目录 前言: 1、三次握手和四次挥手的联系: 为什么挥手必须要将ACK和FIN分开呢? 2.理解 CLOSE_WAIT 状态 CLOSE_WAIT状态的特点 3.FIN_WAIT状态讲解 3.1、FIN_WAIT_1状态 3.2、FIN_WAIT_2状态 3.3、FIN_WAIT状态的作用与意义 4.理解…

矩阵加法        ‌‍‎‏

矩阵加法 C语言代码C 语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入两个n行m列的矩阵A和B&#xff0c;输出它们的和AB。 输入 第一行包含两个整数n和m&#xff0c;表示矩阵的行数和列数。1 <…

当大的div中有六个小的div,上面三个下面三个,当外层div高变大的时候我希望里面的小的div的高也变大

问&#xff1a; 当大的div中有六个小的div&#xff0c;上面三个下面三个&#xff0c;当外层div高变大的时候我希望里面的小的div的高也变大 回答&#xff1a; 这时候我们就不能写死六个小的div的高度&#xff0c;否则上下的小的div的间距就会变大&#xff0c;因为他们的高度…

C++打造局域网聊天室第一课:编程环境及准备知识

文章目录 前言一、使用环境二、基础知识1.MFC&#xff08;Microsoft Foundation Class&#xff09;2.API&#xff08;Application Programming Interface&#xff09;3.Unicode编码4.简单的比较5.WinSock6.多线程知识 总结 前言 C打造局域网聊天室第一课&#xff1a;编程环境及…

【网络安全】网站常见安全漏洞 - 网站基本组成及漏洞定义

文章目录 引言1. 一个网站的基本构成2. 一些我们经常听到的安全事件3. 网站攻击者及其意图3.1 网站攻击者的类型3.2 攻击者的意图 4. 漏洞的分类4.1 按来源分类4.2 按危害分类4.3 常见漏洞与OWASP Top 10 引言 在当今的数字化时代&#xff0c;安全问题已成为技术领域不可忽视的…

大数据项目-Django基于聚类算法实现的房屋售房数据分析及可视化系统

《[含文档PPT源码等]精品Django基于聚类算法实现的房屋售房数据分析及可视化系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程课程答疑等&#xff01; 数据库管理工具&#xff1a;phpstudy/Navicat或者phpstudy/sqlyog 后台管理系统涉及技术&#xff1a; 后台使…

SpringBoot如何使用EasyExcel实现表格导出(简洁快速入门版本)

前言 前面给大家介绍了动态表头的导入&#xff0c;这篇文章给大家介绍如何实现导出 前面给大家介绍了动态表头的导入&#xff0c;我们了解了如何通过EasyExcel灵活地读取结构不固定的Excel文件。这次&#xff0c;我们将目光转向数据导出——即如何将数据以Excel文件的形式输出…

Visual Studio 2022 项目配置常用选项

作为一名C++开发者,经常需要配置第三方库,今天来跟大家截图一下,方便大家快速配置: 头文件包含目录: 或者: 库文件包含目录: