linux 源码搭建Kafka集群,100%有效

kafka源码编译安装

准备三台服务器

	192.168.xxx.xxx
	192.168.xxx.xxx
	192.168.xxx.xxx

安装kafka前需先安装JDK和zookeeper如下步骤:

JDK配置安装

官网地址(https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html)

下载文件到本地,通过远程工具上载文件到服务器自定义目录

解压文件到指定目录(所有节点机器都做,也可忽略后面做节点复制)

tar -zxvf jdk-8u291-linux-x64.tar.gz -C /usr/local/    #解压文件到指定目录
mv jdk1.8.0_291/ java    #修改文件名
cd java

在这里插入图片描述

配置环境变量

vi etc/profile

末尾添加如下内容:

export JAVA_HOME=/usr/local/java        
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export PATH=$PATH:$JAVA_HOME/bin

使配置文件生效

source /etc/profile

检查验证

java -version

在这里插入图片描述

zookeeper 配置安装

官网下载地址(https://zookeeper.apache.org/releases.html)

下载源码包文件到本地通过远程连接工具上载文件到服务器

解压文件

推荐下载编译后的bin源码包

tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C /usr/local/

mv apache-zookeeper-3.7.0-bin/ zookeeper

在这里插入图片描述

创建文件目录用于存放数据

cd /usr/local/zookeeper
mkdir data    #存放数据
mkdir logs    #存放日志文件

进入conf文件夹,将zoo_sample.cfg改为zoo.cfg

cd /usr/local/zookeeper/conf
mv zoo_sample.cfg zoo.cfg

修改配置文件参数

vi zoo.cfg

#The number of milliseconds of each tick

tickTime=2000  #服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳。

#The number of ticks that the initial

#synchronization phase can take

initLimit=10    #配置 Zookeeper 接受客户端(此客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已超过initLimit个tickTime长度后 Zookeeper 服务器还没有收到客户端的返回信息,则表明客户端连接失败。总的时间长度就是 initLimit * tickTime 秒。

#The number of ticks that can pass between

#sending a request and getting an acknowledgement

syncLimit=5  #配置 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 syncLimit * tickTime 秒。

#the directory where the snapshot is stored.

#do not use /tmp for storage, /tmp here is just

#example sakes.

dataDir=/usr/local/zookeeper/data #Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
dataLogDir=/usr/local/zookeeper/logs #dataLogDir:若没提供的话则用dataDir。zookeeper的持久化都存储在这两个目录里。dataLogDir里是放到的顺序日志(WAL)。而dataDir里放的是内存数据结构的snapshot,便于快速恢复。为了达到性能最大化,一般建议把dataDir和dataLogDir分到不同的磁盘上,以充分利用磁盘顺序写的特性。
#the port at which the clients will connect
clientPort=2181   #Zookeeper服务器监听的端口,以接受客户端的访问请求。
#the maximum number of client connections.

#increase this if you need to handle more clients

#maxClientCnxns=60
#Be sure to read the maintenance section of the

administrator guide before turning on autopurge.

#http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

Purge task interval in hours

Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

Metrics Providers

#https://prometheus.io Metrics Exporter

#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
#zookeeper集群配置信息        
server.1=192.168.xxx.xxx:2888:3888     ###注:192.168.xxx.xxx:2888:3888后面一定不要有空格,否则会报错
server.2=192.168.xxx.xxx:2888:3888
server.3=192.168.xxx.xxx:2888:3888
#server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,此端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。2888端口是zookeeper服务相互通信使用的,3888端口是zookeeper服务选举使用的

默认端口说明:

在这里插入图片描述

添加myid文件

说明:除了修改 zoo.cfg 配置文件,集群模式下还要新增一个名叫myid的文件,这个文件放在上述dataDir指定的目录下,这个文件里面就只有一个数据,就是上图配置中server.x的这个x(1,2,3)值,zookeeper启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个server(节点)。

cd /usr/local/zookeeper/data
vi myid

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7JJoAxgE-1629162748604)(kafka%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85.assets/image-20210806213748986.png)]
将配置好的zookeeper 复制到其他集群节点上

scp -r /usr/local/zookeeper/ root@192.168.xxx.xxx:/usr/local/zookeeper

scp -r /usr/local/zookeeper/ root@192.168.xxx.xxx:/usr/local/zookeeper

scp -r /usr/local/zookeeper/ root@192.168.xxx.xxx:/usr/local/zookeeper
##复制安装完成的java 到其它集群节点(如已完成JDK安装请忽略)
scp -r /usr/local/java/ root@192.168.xxx.xxx:/usr/local/java
scp -r /usr/local/java/ root@192.168.xxx.xxx:/usr/local/java
scp -r /usr/local/java/ root@192.168.xxx.xxx:/usr/local/java
## 配置其它集群节点java环境变量
vi /etc/profile
export JAVA_HOME=/usr/local/java        
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export PATH=$PATH:$JAVA_HOME/bin

注:分别修改服务节点的myid 值(与上述server所对应服务器一致如:server.1=192.168.238.128则对应服务器的myid为1以次类推)

vi  /usr/local/zookeeper/data/myid   ## 所有机器

启动节点(所有机器执行下述操作)

cd  /usr/local/zookeeper/bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WuEQ7ICB-1629162748605)(kafka%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85.assets/image-20210806215234596.png)]

./zkServer.sh start #启动命令
./zkServer.sh status # 查看运行状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3adbsrY3-1629162748607)(kafka%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85.assets/image-20210811193047096.png)]
启动完成显示如上

查看各节点状态

192.168.xxx.xxx

在这里插入图片描述

192.168.xxx.xxx

在这里插入图片描述

192.168.xxx.xxx

在这里插入图片描述

kafka配置安装

官网地址下载(http://kafka.apache.org/downloads)

在这里插入图片描述

上载文件到服务器指定目录

cd /usr/local/src/tool/

解压文件

tar -zxvf kafka_2.13-2.8.0.tgz -C /usr/local/

mv kafka_2.13-2.8.0/ kafka
cd kafka/
mkdir kafka-logs //保存日志文件目录 非必须创建

解压后文件目录

cd /usr/local/kafka
在这里插入图片描述

修改配置文件

cd /usr/local/kafka/config

在这里插入图片描述

修改server.properties配置文件

在server.properties中主要修改如下配置:

在这里插入图片描述

broker.id=1  //每个kafka服务器的唯一识别id 默认为0
listeners=PLAINTEXT://192.168.xxx.xxx:9092  //去掉注释配置为本机ip
listeners=PLAINTEXT://:9092    //kafka对外提供服务的默认端口
log.dirs=/usr/local/kafka/kafka-logs   //非必须可选择修改 如需要改需手动创建对应文件目录
zookeeper.connect=192.168.xxx.xxx:2181,192.168.xx.xxx:2181,192.168.xx.xx:2181   //zookeeper集群用逗号隔开

将kafka目录分发到各节点

scp -r kafka/ root@192.168.xxx.xxx:/usr/local/kafka/

scp -r kafka/ root@192.168.xxx.xxx:/usr/local/kafka/

按上述修改如上配置

启动kafka(所有节点)

进入bin目录
cd /usr/local/kafka/bin
./kafka-server-start.sh -daemon ../config/server.properties  
jps //验证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CJUxtFZ9-1629162748621)(kafka%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85.assets/image-20210811204516651.png)]

检查端口

netstat -tlnp

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GdFKsNCg-1629162748622)(kafka%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85.assets/image-20210811204620970.png)]

测试

1.查看topic 列表

bin/kafka-topics.sh --list --zookeeper 192.168.xx.xx:2181 
//这里的ip对应server.properties 配置所在服务器端口  /新安装配置的kafka下无数据

2.创建topic

bin/kafka-topics.sh --describe --zookeeper 192.168.xxx.xxx:2181 --topic test  //创建topic 取名test

3.在其中一台服务器上创建生产者

bin/kafka-console-producer.sh --broker-list 192.168.xx.xx:9092,192.168.xxx.xxx:9092,192.168.xxx.xxx:9092 --topic test

在这里插入图片描述

4.在另外两台服务器创建消费者

./kafka-console-consumer.sh --bootstrap-server 192.168.xxx.xxx:9092,192.168.xxx.xxx:9092,192.168.xxx.xxx:9092 --topic test --from-beginning

在这里插入图片描述
测试通过!

posted @   药罐  阅读(503)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示