linux端进行kafka集群服务的搭建

1.环境变量的配置

1.1 修改/etc/hosts
js 复制代码
192.168.220.102 hadoop102
192.168.220.103 hadoop103
192.168.220.104 hadoop104
1.2 修改/etc/hostname
js 复制代码
hadoop102
1.3 添加文件/etc/profile.d/my_env.sh
js 复制代码
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin

保存之后 source /etc/profile.d/my_env.sh

2.SSH之间进行无密登录访问

js 复制代码
1.使用hadoop102 进行演示

登录虚拟机hadoop102
ssh-keygen -t rsa 
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

3.zookeeper安装

js 复制代码
在/opt/module/zookeeper/目录下创建zkData
# 创建myid文件内容如下
1

# 进入cd /opt/module/zookeeper/conf文件目录
cd /opt/module/zookeeper/conf

# 修改文件名称
mv zoo_sample.cfg zoo.cfg

# 修改文件内容
vim zoo.cfg

# 以下内容为修改内容
dataDir=/opt/module/zookeeper/zkData
server.1=hadoop102:2888:3888
server.2=hadoop103:2888:3888
server.3=hadoop104:2888:3888

# 进入/opt/module路径
cd /opt/module

# 调用分发脚本将本机得ZooKeeper安装包分发到其他两台机器
xsync zookeeper

4.zookeeper启动脚本

js 复制代码
#!/bin/bash

case $1 in
"start"){
	for i in hadoop102 hadoop103 hadoop104
	do
        echo ---------- zookeeper $i 启动 ------------
		ssh $i "/opt/module/zookeeper/bin/zkServer.sh start"
	done
};;
"stop"){
	for i in hadoop102 hadoop103 hadoop104
	do
        echo ---------- zookeeper $i 停止 ------------    
		ssh $i "/opt/module/zookeeper/bin/zkServer.sh stop"
	done
};;
"status"){
	for i in hadoop102 hadoop103 hadoop104
	do
        echo ---------- zookeeper $i 状态 ------------    
		ssh $i "/opt/module/zookeeper/bin/zkServer.sh status"
	done
};;
esac

5.kafka安装

js 复制代码
vim server.properties

#broker的全局唯一编号,每个服务节点不能重复,只能是数字。
broker.id=1 #(hadoop102->1 hadoop103->2 hadoop104->3)

#broker对外暴露的IP和端口 (每个节点单独配置)
advertised.listeners=PLAINTEXT://hadoop102:9092 #(hadoop102->hadoop102:9092 hadoop103->hadoop103:9092 hadoop104->hadoop104:9092)

路径,路径与路径之间可以用","分隔
log.dirs=/opt/module/kafka/datas

#配置连接Zookeeper集群地址(在zk根目录下创建/kafka,方便管理)
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka

6.kafka启动脚本

js 复制代码
#! /bin/bash

case $1 in
"start"){
    for i in hadoop102 hadoop103 hadoop104
    do
        echo " --------启动 $i Kafka-------"
        ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties"
    done
};;
"stop"){
    for i in hadoop102 hadoop103 hadoop104
    do
        echo " --------停止 $i Kafka-------"
        ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh "
    done
};;
esac

7.cluster管理脚本

js 复制代码
#!/bin/bash

case $1 in
"start"){
        echo ================== 启动 Kafka集群 ==================
        #启动 Zookeeper集群
        zk.sh start

        #启动 Kafka采集集群
        kafka.sh start

        };;
"stop"){
        echo ================== 停止 Kafka集群 ==================

        #停止 Kafka采集集群
        kafka.sh stop

		#循环直至 Kafka 集群进程全部停止
		kafka_count=$(xcall jps | grep Kafka | wc -l)
		while [ $kafka_count -gt 0 ]
		do
			sleep 1
			kafka_count=$(xcall | grep Kafka | wc -l)
            echo "当前未停止的 Kafka 进程数为 $kafka_count"
		done

        #停止 Zookeeper集群
        zk.sh stop
};;
esac

8.xcall与xsync脚本

8.1 xcall
js 复制代码
#!/bin/bash

# ====== 节点列表(按你集群实际修改)======
HOSTS=("hadoop102" "hadoop103" "hadoop104")

# ====== 参数校验 ======
if [ $# -lt 1 ]; then
  echo "Usage: xcall <command>"
  exit 1
fi

# ====== 执行 ======
for host in "${HOSTS[@]}"; do
  echo "==================== $host ===================="
  ssh $host "$@"
done
8.2 xsync
js 复制代码
#!/bin/bash

# 1. 判断参数个数
if [ $# -lt 1 ]; then
    echo "Not Enough Arguement!"
    exit 1
fi

# 2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104; do
    echo "==================== $host ===================="

    # 3. 遍历所有目录,挨个发送
    for file in "$@"; do
        # 4. 判断文件是否存在
        if [ -e "$file" ]; then
            # 5. 获取父目录
            pdir=$(cd -P "$(dirname "$file")"; pwd)
            # 6. 获取当前文件的名称
            fname=$(basename "$file")

            ssh "$host" "mkdir -p $pdir"
            rsync -av "$pdir/$fname" "$host:$pdir"
        else
            echo "$file does not exist!"
        fi
    done
done
相关推荐
想用offer打牌13 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
KYGALYX14 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了14 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法15 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment15 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
Cobyte16 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
程序员侠客行17 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
Honmaple17 小时前
QMD (Quarto Markdown) 搭建与使用指南
后端
PP东17 小时前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable
invicinble17 小时前
springboot的核心实现机制原理
java·spring boot·后端