本文将重点介绍如何在Linux CentOS下安装Kafka,前提假设你已经安装好了Java开发并配置好了环境变量。本文所使用的Java版本为:1.8.0_231-b11。
准备工作:1、安装并搭建好开发环境2、下载最新的zookeeper3、下载最新的Kafka
安装Zookeeper
Kafka使用Zookeeper保存集群的元数据信息和消费者信息。Kafka发行版自带了Zookeeper,可以直接从脚本中启动,当然要安装一个Zookeeper也不是什么难事。话不多说,接下来就开始Zookeeper的安装之旅吧!
Kafka和Zookeeper关系图
到官网下载Zookeeper,这里我选用wget命令来下载,当前的最新版本是:3.5.6,下载方式如下图:
wget下载Zookeeper
我们创建如下两个目录:~/environment/zookeeper/local,~/environment/zookeeper/data。
~/environment/zookeeper/local:zookeeper安装目录
~/environment/zookeeper/data:保存zookeeper数据目录
1、单机服务
下面将演示如何使用基本的配置来安装zookeeper。
# tar -xvzf apache-zookeeper-3.5.6-bin.tar.gz
# cat > zoo.cfg << EOF
> tickTime=2000
> dataDir=/home/xiongyan/environment/zookeeper/data
> clientPort=2181
> EOF
# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/xiongyan/environment/zookeeper/local/bin/../conf/zoo.cfg
Starting zookeeper …… STARTED
提示:此处必须使用root用户启动zookeeper,否则会因为权限不够而导致如下异常:
通过执行zookeeper启动命令“./zkServer.sh start”,成功启动了zk服务器。现在就可以使用telnet工具连接到zookeeper端口上,然后通过发送srvr命令来验证zookeeper是否正确安装。
提示:如果暂未安装上telnet工具,可以使用“yum install telnet”命令来安装
下面的实例演示了如何连接上zk并验证zk是否正确安装。
# telnet localhost 2181
Trying ::1...
Connected to localhost.
Escape character is '^]'.
srvr
Zookeeper version: 3.5.6-c11b7e26bc554b8523dc929761dd28808913f091, built on 10/08/2019 20:18 GMT
Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: standalone
Node count: 5
Connection closed by foreign host.
2、Zookeeper群组(Ensemble)
群组即为Zookeeper集群。Zookeeper使用了一致性协议,因此推辞每个群组里应该包含基数个节点(比如3,5,7,9个等),因为只有当群组里的大多数节点都是处于可用的状态的时候才能处理外部请求。也就是说,如果你的群里里面包含5个节点,那么它将允许最多2个节点失效。
群组节点个数的选择假设有一个包含5个节点的群组,如果要对群组做一些包括更换节点在内的配置更改,需要一次重启每一个节点。如果你的集群无法容忍多个节点失效,那么进行群组维护时就会存在风险。不过,也不建议一个群组包含超过7个节点,因为zookeeper使用了一致性协议,节点过多会降低整个群组的性能。
群组需要有一些公共配置,上面列出了所有服务器的清单,并且每个服务器还要在数据目录中创建一个myid文件,用于指明自己的ID。如果群组里服务器的机器名是zoo1.demo.com、zoo2.demo.com、zoo3.demo.com,那么配置文件可能是这样的:
tickTime=2000
dataDir=~/environment/zookeeper/data
clientPort=2181
initLimit=20
syncLimit=5
server.1=zoo1.demo.com:2888:3888
server.2=zoo2.demo.com:2888:3888
server.3=zoo3.demo.com:2888:3888
在这个配置中,initLimit表示用于在从节点与主节点之间建立初始化连接的时间上限,syncLimit表示允许从节点与主节点处于不同步状态的时间上限。这两个值都是tickTime的倍数,所以initLimit是20*2000ms,也就是40s。配置还列出了群组里所有服务器的地址。服务器地址遵循server.X=hostname:peerPort:leaderPort格式,各个参数说明如下:
X:服务器的ID,它必须是一个整数,当然不一定就要从0开始,也不要求必须是连续的;
hostname:服务器的机器名或者IP地址;
peerPort:用于节点间通信的TCP端口;
leaderPort:用于首领选举的TCP端口。
客户端只需要通过clientPort就能连接到群组,而群组节点间的通信则需要同时用到这3个端口(clientPort、peerPort、leaderPort)。
除了公共的配置文件外,每个服务器都必须在data Dir目录中创建一个叫做myid的文件,文件必须要包含服务器ID,这个ID要与配置文件里配置的ID保持一致。完成了这一系列的步骤就可以尝试启动服务器,让它们彼此间进行通信了。