#!/usr/bin/bash
#1、配置脚本中的myid文件一定要在设置的dataDir=/tmp/zookeeper目录下,否则项目无法启动
#2、zookeeper要设置server.1-3.其中zookeeper服务端口为2181 选举端口为2888:3888
#kafaka创建topic
#bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
#kafaka显示topic
#bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
#kafaka使用生产者生产数据
#bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
#kafaka使用消费着消费数据
#bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
#####################################################################################
#需要自行配置hostname和hosts################*************************************###
############################################*************注意*******************###
############################################***********************************###
#firewalled需要禁用或者放行#
############################
#systemctl stop firewall
#systemctl stop firewalld
#systemctl disable firewalld
#systemctl status firewalld
##############################测试卡夫卡##########################################
#kafaka创建topic
#bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
#kafaka显示topic
#bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
#kafaka使用生产者生产数据
#bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
#kafaka使用消费着消费数据
#bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
ip="
192.168.98.170
192.168.98.171
192.168.98.172
"
#myid增长起始值
g=1
p=0
#服务器密码
passwd=123456
#sed替换kafka配置文件中的zookeeper地址
config="zookeeper.connect\=192.168.98.170:2181,192.168.98.171:2181,192.168.98.172:2181"
#追加配置zookeeper配置文件
cat <<EOF >tmp.txt
tickTime=2000
initLimit=10
syncLimit=5
server.1=192.168.98.170:2888:3888
server.2=192.168.98.171:2888:3888
server.3=192.168.98.172:2888:3888
EOF
#循环后台启动zookeeper任务进程
cat <<EOF >jc.txt
nohup /usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties &>/tmp/zookeeper.log
EOF
exp1="export JAVA_HOME=\/usr\/lib\/jvm\/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64"
exp2="export CLASSPATH=.:\$JAVA_HOME\/jre\/lib\/rt.jar:\$JAVA_HOME\/lib\/dt.jar:\$JAVA_HOME\/lib\/tools.jar"
exp3="export PATH=\$PATH:\$JAVA_HOME\/bin"
l1="unset i"
echo "############################1、配置服务器密钥############################"
for a in $ip
do
/usr/bin/expect <<EOF
spawn ssh-copy-id $a
expect {
"yes/no" { send "yes\r"; exp_continue }
"*password" { send "$passwd\n"; exp_continue }
{ send "\n"}
}
EOF
done
echo "############################2、拷贝kafka安装包############################"
for i in $ip
do
scp kafka_2.12-2.8.0.tgz tmp.txt root@$i:/tmp/
done
wait;
echo "sed 替换的zookeeper.connect 未设置为变量请自行设置czookeeper.connect\=192.168.98.170:2181,192.168.98.171:2181,192.168.98.172:2181"
echo "############################3、配置jdk、及服务变量############################"
for j in $ip
do
ssh root@$j "cd /tmp/
tar -zvxf kafka_2.12-2.8.0.tgz
rm -rf /usr/local/kafka/
cp -rp kafka_2.12-2.8.0 /usr/local/kafka/
mkdir -p /usr/local/kafka/zookeeper
mkdir -p /tmp/zookeeper/
mkdir -p /tmp/zookeeper/log
cat <<EOF >/tmp/zookeeper/myid
$g
EOF
cat /tmp/tmp.txt >> /usr/local/kafka/config/zookeeper.properties
sed -ir "/^broker.id\=0/cbroker.id\=$g" /usr/local/kafka/config/server.properties
sed -ir "/^zookeeper.connect\=/c$config" /usr/local/kafka/config/server.properties
yum install -y java-1.8.0-openjdk.x86_64
yum install -y java-1.8.0-openjdk-devel.x86_64
sed -ri '/unset i/i$exp1' /etc/profile
sed -ri '/unset i/i$exp2' /etc/profile
sed -ri '/unset i/i$exp3' /etc/profile
source /etc/profile
"
let ++p
let ++g
done
wait
echo "启动任务并设置为后台进程"
echo "############################4、配置服务开机自启############################"
for kk in $ip
do
{
ssh root@$kk "
cat <<EOF >/etc/systemd/system/zookeeper.service
[Unit]
Description=Zookeeper
After=network.target remote-fs.target nss-lookup.target
[Service]
ExecStart=/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/kafka/bin/zookeeper-server-stop.sh
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/kafka.service
[Unit]
Description=kafka
After=network.target remote-fs.target nss-lookup.target zookeeper.service
[Service]
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh
#PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable zookeeper.service
systemctl start zookeeper
systemctl enable kafka.service
systemctl start kafka
"
}&
done
echo "服务启动完毕,请自检 systemctl status zookeeper"
echo "服务启动完毕,请自检 systemctl status kafka"
echo "创建topic,查看是否可以创建成功"
echo "/usr/local/kafka/bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092"
echo "显示topic,显示Leader,显示Replicas,显示Isr"
echo "/usr/local/kafka/bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092"
echo "创建生产者,生产数据"
echo "/usr/local/kafka/bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092"
echo "创建消费者,读取生产者数据"
echo "/usr/local/kafka/bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092"