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/

然后其他节点需要修改的几个地方就是zookeeper的myid文件,kafka配置文件中的broker.id,listeners,advertised

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

 

posted @ 2022-05-24 09:13  RFAA  阅读(866)  评论(0编辑  收藏  举报