一、 前期环境及初始化准备
1、下载安装包及检查java环境
相关安装包可以在相关YUM源站下载下截至相关目录:如cd /opt/soft目录。
wget https://mirrors.cloud.tencent.com/apache/kafka/3.1.0/kafka_2.13-3.1.0.tgz
wget https://mirrors.cloud.tencent.com/apache/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
部署jdk8环境(这种是原包,如果是用YUm安装,可以不用配置环境,使用默认环境)
mkdir /opt/soft
tar -xf jdk-8u301-linux-x64.tar.gz -C /opt/app
chown -R rcs.rcs /opt/app/jdk1.8.0_301
配置java环境变量
#JAVA ENV
export JAVA_HOME=/opt/app/jdk1.8.0_301
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
生效环境变量
source /etc/profile
检查环境
[root@kafka-01 jdk1.8.0_301]# java -version
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
2、服务器基本情况
服务主机名 | IP | 用途 |
---|---|---|
kafka01 | 192.168.42.189 | zookeeper,kafka |
kafka02 | 192.168.42.190 | zookeeper,kafka |
kafka03 | 192.168.42.191 | zookeeper,kafka |
2、基础环境优化
1) 修改内核参数:sysctl.conf
修改并发连接数及端口数。
MonogDB本身也是一个内存使用量较大的数据库,它占用的内存比较多,不经常访问的内存也会不少,这些内存如果被linux错误的交换出去了,将浪费很多CPU和IO资源,极大地降低数据库的性能。如果vm.swappiness设置为0,会带来内存溢出的问题,当内存不足时,会强制把某些程序kill掉。所以最好在MongoDB的服务器上设置vm.swappiness的值在1~10之间,尽可能少地使用swap。如果服务器内存比较大时,可以考虑设置vm.swappiness=0。
/etc/sysctl.conf
cat >> /etc/sysctl.conf << EOF
#并发连接backlog设置##
net.core.somaxconn=32768
net.core.netdev_max_backlog=16384
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.optmem_max=16777216
#可用知名端口范围:####
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_syn_backlog=16384
#TCP Socket 读写 Buffer 设置:###
net.ipv4.tcp_rmem = 1024 4096 16777216
net.ipv4.tcp_wmem = 1024 4096 16777216
vm.swappiness = 0
EOF
2)修改文件句柄数等
/etc/security/limits.conf
-
cat >> /etc/security/limits.conf << EOF * hard core 0 * soft core 0 * soft nofile 1048576 * hard nofile 1048576 * soft nproc 524288 * hard nproc 524288 EOF sed -i 's/4096/1048576/g' /etc/security/limits.d/20-nproc.conf egrep -v "^$|^#" /etc/security/limits.d/20-nproc.conf
3)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
iptables -F
iptables -X
4)添加hosts配置
echo "192.168.42.189 kafka01
192.168.42.190 kafka02
192.168.42.191 kafka03" >>/etc/hosts
5)创建用户及程序目录(三台机器上运行)
#创建用户
useradd rcs
#程序目录
mkdir -p /opt/app
ln -s /opt/app/apache-zookeeper-3.8.0-bin /opt/app/apache-zookeeper
tar -xf kafka_2.13-3.1.0.tgz -C /opt/app/
ln -s /opt/app/kafka_2.13-3.1.0 /opt/app/kafka
数据目录
mkdir -p /data/{zookeeper,kafka}
#日志目录
mkdir -p /data/logs/{zookeeper,kafka}
chown -R rcs.rcs /data
6) 添加PATH 环境
echo “PATH= P A T H : PATH: PATH:HOME/bin:/opt/app/apache-zookeeper/bin:/opt/app/kafka/bin” >>/root/.bash_profile
[root@kafka03 bin]# grep app /root/.bash_profile
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/opt/app/apache-zookeeper/bin:/opt/app/kafka/bin
[root@kafka03 bin]#
二、安装zookeeper
1)查看解压目录并生成配置文件
[root@kafka01 apache-zookeeper-3.8.0]# ll /opt/app
total 4
drwxr-xr-x 17 test ftp 4096 Feb 25 00:47 apache-zookeeper-3.8.0
drwxr-xr-x 7 root root 105 Jan 12 01:07 kafka_2.13-3.1.0
[root@kafka01 apache-zookeeper-3.8.0]#
cat > /opt/app/apache-zookeeper-3.8.0/conf/zoo.cfg << EOF
tickTime=2000
initLimit=10
syncLimit=5
#数据目录
dataDir=/data/zookeeper
#日志目录
dataLogDir=/data/logs/zookeeper
#服务端口
clientPort=2181
server.1=192.168.42.189:2888:3888
server.2=192.168.42.190:2888:3888
server.3=192.168.42.191:2888:3888
EOF
1.tickTime =2000:Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。
2.initLimit =10:LF初始通信时限
集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍 的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
3.syncLimit =5:LF同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
4.dataDir:数据文件目录+数据持久化路径,主要用于保存Zookeeper中的数据。
5.clientPort =2181:客户端连接端口,监听客户端连接的端口。
6.server.A=B:C:D。
A是一个数字,表示这个是第几号服务器;集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
B是这个服务器的地址;
C是这个服务器Follower与集群中的Leader服务器交换信息的端口;
D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
7.admin.serverPort=8088,zookeeper最近版本中有个内嵌的管理控制台是通过jetty启动,默认会占用8080 端口,可通过admin.serverPort=自定义端口号修改。
2)设置相关节点ID(分别在三台机器上创建)
#分别为 3 台 Zookeeper 节点设置不同的节点 id。相关数据参考zoo.cfg 里的server.X 配置
#节点1
echo ‘1’ > /data/zookeeper/myid
#节点2
echo ‘2’ > /data/zookeeper/myid
#节点3
echo ‘3’ > /data/zookeeper/myid
3)通过systemd启动zookeeper服务(在三台机器上创建)
cat >> /etc/systemd/system/zookeeper.service << EOF
[Unit]
Description=Zookeeper Service
After=network.target
After=syslog.target
[Service]
Environment=ZOO_LOG_DIR=/data/logs/zookeeper
SyslogIdentifier=zookeeper
Type=forking
User=rcs
Group=rcs
#如果源包安装java需指定目录:
#Environment=JAVA_HOME=/opt/app/jdk1.8.0_301
ExecStart=/opt/app/apache-zookeeper/bin/zkServer.sh start /opt/app/apache-zookeeper/conf/zoo.cfg
ExecStop=/opt/app/apache-zookeeper/bin/zkServer.sh stop /opt/app/apache-zookeeper/conf/zoo.cfg
ExecReload=/opt/app/apache-zookeeper/bin/zkServer.sh restart /opt/app/apache-zookeeper/conf/zoo.cfg
[Install]
WantedBy=default.target
EOF
4)同步zookeeper至其它节点
使用scp同步发送到另外2台服务器
scp -r /opt/app/apache-zookeeper* root@192.168.42.190:/opt/app/
scp -r /opt/app/apache-zookeeper* root@192.168.42.191:/opt/app/
chown -R rcs.rcs /data
chown -R rcs.rcs /opt/app/
5)分别启动三台机器上的zookeeper
systemctl enable zookeeper
systemctl start zookeeper
三、安装kafka (使用zookeeper方式)
1) 生成配置文件:
cat >> /opt/app/kafka/config/server.properties << EOF
#kafka配置server.properties,每个节点配置的ID不能一样。
broker.id=0
#Kafka Broker 监听地址和端口
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.42.189:9092
#Broker 用于处理网络请求的线程数,默认值 3。
num.network.threads=16
#Broker 用于处理 I/O 的线程数,推荐值 8 * 磁盘数,默认值 8.
num.io.threads=32
#在网络线程停止读取新请求之前,可以排队等待 I/O 线程处理的最大请求个数,
queued.max.requests=50000
#socket 发送缓冲区大小
socket.send.buffer.bytes=1024000
#socket 接收缓冲区大小
socket.receive.buffer.bytes=1024000
#socket 接收请求的最大值(防止 OOM)
socket.request.max.bytes=104857600
#数据目录
log.dirs=/data/logs/kafka
#默认分区数
num.partitions=50
#每个数据目录中的线程数,用于在启动时日志恢复,并在关闭时刷新
num.recovery.threads.per.data.dir=1
#副本数视情况而定,group元数据内部主题的复制因子。磁盘空间大可以设置为3,最少设置为2
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=2
#清理过期数据线程数
num.recovery.threads.per.data.dir=3
#单条消息最大 100M
message.max.bytes=104857600
#日志保留时间
log.retention.hours=72
#日志文件中每个 segment 的大小为 1G
log.segment.bytes=1073741824
#检查 segment 文件大小的周期 5 分钟
log.retention.check.interval.ms=300000
#Zookeeper 连接参数
zookeeper.connect=192.168.42.189:2181,192.168.42.190:2181,192.168.42.191:2181
#连接 Zookeeper 的超时时间18秒
zookeeper.connection.timeout.ms=18000
#允许删除主题
delete.topic.enable