Kafka多节点环境安装
4.3.1 安装多节点ZooKeeper集群
目前来说Kafka可以说是强依赖ZooKeeper的,因此生产环境中一个高可用、高可靠的ZooKeeper集群也必不可少的。ZooKeeper集群通常被称为一个ensemble。只要这个ensemble中的大多数节点存活,那么ZooKeeper集群就能正常提供服务。显然,既然是大多数,那么最好使用奇数个服务器,即2n+1个服务器,这样整个ZooKeeper集群最多可以容忍n台服务器宕机而保证依然提供服务。如果使用偶数个服务器则通常会浪费一台服务器的资源。
基于上面的规则,一个生产环境中最少的ZooKeeper集群节点数量是3。在实际使用场景中,5台服务器构成的ZooKeeper集群也是十分常见的,再多数量的集群则不常见。
典型的多节点环境配置文件zoo.cfg:
tickTime=2000 dataDir=/usr/zookeeper/data_dir clientPort=2181 initLimit=5 syncLimit=2 server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 |
关键参数的含义:
- tickTime: ZooKeeper最小的时间单位,用于丈量心跳时间和超时时间等。通常设置成默认值2秒即可。
- dataDir:ZooKeeper会在内存中保存系统快照,并定期写入该路径指定的文件夹中。生产环境中需要注意该文件夹的磁盘占用情况。
- clientPort:ZooKeeper监听客户端连接的端口,一般设置成默认值2181即可。
- initLimit:指定follower节点初始时连接leader节点的最大tick次数。假设是5,表示follower必须在5*tickTime时间内(默认值10秒)连接上leader,否则将被视为超时。
- syncLimit:设定follower节点与leader节点进行同步的最大时间。与initLimit类似,它也是以tickTime为单位进行指定的。
- server.X=host:port:port:配置文件中的最后三行都是这种形式的。这里的X必须是一个全局唯一的数字,且需要与myid文件中的数字相对应。一般设置X为1-255之间的整数。这行的后面还配置了两个端口,通常是2888和2888。第一个端口用于使follower节点连接leader节点,而第二个端口则用于leader选举。
每个ZooKeeper服务器都有一个唯一的ID。这个ID主要用在两个地方:一个是刚刚我们配置的zoo.cfg文件,另一个则是myid文件。myid文件位于zoo.cfg中dataDir配置的目录下,其内容也很简单,仅是一个数字,即ID。
下面就以一台机器为例展示如何安装3个节点的ZooKeeper集群,多台机器上安装的方法类似。
首先,在zookeeper的conf目录下创建3个配置文件zoo1.cfg、zoo2.cfg和zoo3.cfg,注意,如果是在多台服务器上安装ZooKeeper集群,可以选取相同的配置文件名字。
zoo1.cfg:
tickTime=2000 dataDir=/mnt/disk/huxitest/data_logs/zookeeper1 clientPort=2181 initLimit=5 syncLimit=2 server.1=zk1:2888:3888 server.2=zk2:2889:3889 server.3=zk3:2890:3890 |
zoo2.cfg:
tickTime=2000 dataDir=/mnt/disk/huxitest/data_logs/zookeeper2 clientPort=2182 initLimit=5 syncLimit=2 server.1=zk1:2888:3888 server.2=zk2:2889:3889 server.3=zk3:2890:3890 |
zoo3.cfg:
tickTime=2000 dataDir=/mnt/disk/huxitest/data_logs/zookeeper3 clientPort=2183 initLimit=5 syncLimit=2 server.1=zk1:2888:3888 server.2=zk2:2889:3889 server.3=zk3:2890:3890 |
上面的配置中分别选取了2181、2182和2183这3个端口。如果是多机器安装方案,指定相同的端口号也可以,只要确保没有端口冲突就行,这也包括配置文件中的所有其他端口。
下一步是创建myid文件,myid文件必须位于配置文件的dataDir中,即/mnt/disk/huxitest/data_logs/zookeeper1,2,3下,具体命令如下:
echo "1" > /mnt/disk/huxitest/data_logs/zookeeper1/myid echo "2" > /mnt/disk/huxitest/data_logs/zookeeper2/myid echo "3" > /mnt/disk/huxitest/data_logs/zookeeper3/myid |
下一步就是启动3个控制台终端分别在ZooKeeper的安装目录下执行以下命令启动ZooKeeper服务器:
java -cp zookeeper-3.4.10.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.16.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo1.cfg java -cp zookeeper-3.4.10.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.16.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo2.cfg java -cp zookeeper-3.4.10.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.16.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo3.cfg |
如果是多节点安装方案,既可以使用上面的命令启动ZooKeeper,也可以直接运行zkServer脚本启动ZooKeeper,比如:
bin/zkServer.sh(bat) start conf/zoo.cfg |
当所有的ZooKeeper服务器启动成功后,我们还需要检查一下整个集群的状态,分别执行以下命令:
bin/zkServer.sh status conf/zoo1.cfg bin/zkServer.sh status conf/zoo2.cfg bin/zkServer.sh status conf/zoo3.cfg |
4.3.2 安装多节点的Kafka
下面使用一台机器来模拟一个3节点Kafka集群的搭建,多台机器搭建的方式类似。
创建多份配置,配置文件1:
broker.id=0 delete.topic.enable=true listeners=PLAINTEXT://kafka1:9092 log.dirs=/mnt/disk/huxitest/data_logs/kafka1 zookeeper.connect=zk1:8001,zk2:8002,zk3:8003 unclean.leader.election.enable=false zookeeper.connection.timeout.ms=6000 |
配置文件2:
broker.id=1 delete.topic.enable=true listeners=PLAINTEXT://kafka2:9092 log.dirs=/mnt/disk/huxitest/data_logs/kafka2 zookeeper.connect=zk1:8001,zk2:8002,zk3:8003 unclean.leader.election.enable=false zookeeper.connection.timeout.ms=6000 |
配置文件3:
broker.id=2 delete.topic.enable=true listeners=PLAINTEXT://kafka3:9092 log.dirs=/mnt/disk/huxitest/data_logs/kafka3 zookeeper.connect=zk1:8001,zk2:8002,zk3:8003 unclean.leader.election.enable=false zookeeper.connection.timeout.ms=6000 |
在上面3个配置文件中我们需要每台Kafka服务器指定不同的broker ID。该ID在整个集群中必须是唯一的。而配置listeners时最好使用节点的FQDN(Fully Qualified Domain Name)即全称域名,尽量不要使用IP地址。zookeeper.connect必须同时指定所有的ZooKeeper节点。
创建Kafka配置文件后,只需要执行下列命令启动Kafka broker服务器:
bin/kafka-server-start.sh -daemon config/server1.properties bin/kafka-server-start.sh -daemon config/server2.properties bin/kafka-server-start.sh -daemon config/server3.properties |
可以通过查看位于Kafka logs目录下的server.log或jps命令来确认Kafka broker是否已经启动成功。
上一篇: Kafka的Consumer主要参数
下一篇: Kafka的Consumer构建
推荐阅读
-
kafka与storm集群环境的安装步骤详解
-
CentOS 7.x编译安装Nginx1.10.3+MySQL5.7.16+PHP5.2 5.3 5.4 5.5 5.6 7.0 7.1多版本全能环境
-
kafka与storm集群环境的安装步骤详解
-
SUSE12Sp3安装配置.net core 生产环境(7)-kafka离线安装
-
CentOS 7.x编译安装Nginx1.10.3+MySQL5.7.16+PHP5.2 5.3 5.4 5.5 5.6 7.0 7.1多版本全能环境
-
win2008 iis7/iis7.5下最简单最强安装多版本PHP支持环境
-
hadoop使用docker安装和使用(单节点适合开发环境)
-
MySQL Group Replication 多机多实例安装配置(Windows环境)
-
在Linux环境下安装Kafka
-
Ruby环境下安装使用bundler来管理多版本的gem