Kafka集群部署(使用自带的zookeeper)
Kafka2.8版本才开始自带了Zookeeper,所以注意下版本
kafka官网:http://kafka.apache.org/
kafka配置快速入门:http://kafka.apache.org/quickstart
kafka下载页面:http://kafka.apache.org/downloads
服务规划
Kafka集群部署
注意事项:
- 集群的数量不是越多越好,最好不要超过 7 个,因为节点越多,消息复制需要的时间就越长,整个群组的吞吐量就越低。
- 集群数量最好是单数,因为超过一半故障集群就不能用了,设置为单数容错率更高。
该部署以Red Hat 7为例
1.关闭防火墙和SELinux(所有设备)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
vi /etc/selinux/config
SELINUX=enforcing改为SELINUX=disabled
2.安装JDK(所有设备)
安装kafka前需要先安装jdk,可参考我之前编写的JDK的安装配置(Windows、Linux),不过kafka好像已经宣布了即将弃用对java8的支持,所以在未来版本,肯定也就不能安装java8版本了
3.配置IP地址和主机名之间的映射(所有设备)
vim /etc/hosts
192.168.36.152 node1 192.168.36.153 node2 192.168.36.154 node3
4.配置主机名(所有设备)
vim /etc/sysconfig/network
NETWORKING=yes hostname=主机名
hostnamectl set-hostname 主机名
需重启设备使配置生效:init 6
5.安装Kafka(192.168.36.152)
解压安装包
tar -zxvf kafka_2.13-3.1.1.tgz -C /usr/local/
配置Kafka自带的zookeeper配置文件
cd /usr/local/kafka_2.13-3.1.1/config/
vim zookeeper.properties
#dataDir是zookeeper持久化数据存放的目录 dataDir=/usr/local/kafka_2.13-3.1.1/zookeeper/data #zookeeper日志文件 dataLogDir=/usr/local/kafka_2.13-3.1.1/zookeeper/log clientPort=2181 maxClientCnxns=100 #配置单元时间。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。 tickTime=20 #节点的初始化时间。这里指的是Zookeeper服务器集群中连接到Leader的Follower服务器,当已经超过指定的心跳的时间长度后,zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。该参数是参数tickTime的5倍,也就是说总的时间长度就是 10*2000=20 秒 initLimit=10 #心跳最大延迟周期。这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10秒 syncLimit=5 server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888
mkdir -p /usr/local/kafka_2.13-3.1.1/zookeeper/data
mkdir -p /usr/local/kafka_2.13-3.1.1/zookeeper/log
配置Zookeeper的id
cd /usr/local/kafka_2.13-3.1.1/zookeeper/data
vim myid
#myid对应zoo.cfg配置文件里相应的server号,node1也就会是1,node2是2,node3则是3 1
配置Kafka配置文件
cd /usr/local/kafka_2.13-3.1.1/config/
vim server.properties
#各节点不可重复,唯一标识 broker.id=1 #监听IP和端口,本地IP地址,这里我写的本地域名(ECS上部署的话图方便可以写成0.0.0.0) listeners=PLAINTEXT://node1:9092 #本地IP地址,这里我写的本地域名(ECS上这里可以写成公网的IP地址) advertised.listeners=PLAINTEXT://node1:9092 #Kafka数据存储路径,会按照分区名进行存储 log.dirs=/usr/local/kafka_2.13-3.1.1/kafka-data #Zookeeper节点 zookeeper.connect=node1:2181,node2:2181,node3:2181/kafka
mkdir /usr/local/kafka_2.13-3.1.1/kafka-data
将Kafka文件进行分发给其他节点
scp -r /usr/local/kafka_2.13-3.1.1/ root@node2:/usr/local/
scp -r /usr/local/kafka_2.13-3.1.1/ root@node3:/usr/local/
6.配置环境变量(所有设备)
vim /etc/profile
#KAFKA_HOME export KAFKA_HOME=/usr/local/kafka_2.13-3.1.1 export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile
7.启动Zookeeper和Kafka(所有设备)
启动zookeeper
cd /usr/local/kafka_2.13-3.1.1/bin
nohup ./zookeeper-server-start.sh ../config/zookeeper.properties > /usr/local/kafka_2.13-3.1.1/zookeeper.log 2>&1 &
tail -f /usr/local/kafka_2.13-3.1.1/zookeeper.log
#这里要注意看下日志有没有特殊报错,若日志提示WARN: Read timed out的话是因为zookeeper其他节点还没启动,全部启动则不会有该提示了
jps命令查看,看到QuorumPeerMain即可,QuorumPeerMain是zookeeper集群的启动类,用来加载配置启动QuorumPeer线程的
10451 QuorumPeerMain 10622 Jps
启动Kafka
cd /usr/local/kafka_2.13-3.1.1/bin
nohup ./kafka-server-start.sh ../config/server.properties > /usr/local/kafka_2.13-3.1.1/kafka.log 2>&1 &
jps命令查看
11027 QuorumPeerMain 12263 Kafka 12347 Jps