单机简单搭建一个kafka集群(没有进行内核参数和JVM的调优)
1.JDK安装
在我的部署单节点kafka的博客里有相关的方法。(https://www.cnblogs.com/ToBeExpert/p/9789486.html )zookeeper和kafka的压缩包下载地址也在单节点部署的这篇博客里。
1.zookeeper集群的搭建
将zookeeper.tar.gz解压为三个目录,例如:
以上图中的目录结构为例,进入./zookeeper-1/conf。找到zoo.cfg文件,如果没有就复制一份zoo_sample.cfg并将其改名为zoo.cfg,zoo.cfg是zookeeper的配置文件。如下:
在部署zookeeper集群之前,一定要记得将已经运行的zookeeper节点停止。现在修改zoo.cfg的配置。
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/usr/zookeeper/zookeeper-1/zkData dataLogDir=/usr/zookeeper/zookeeper-1/zkLogs # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 server.0=172.20.25.100:2890:3890
配置项含义:
tickTime: 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。 initLimit: 这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒 syncLimit: 这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒 dataDir: 快照日志的存储路径 dataLogDir: 事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多 clientPort: 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。如果是单机部署zookeeper集群(伪集群),每一个zookeeper节点的zoo.cfg中的clientPort都要互不相同。 server.id=ip:port1:port2: server.id中的id是一个数字,同一个集群中的id不能重复,它代表这这个节点在集群中的身份,具体的使用方法是,要在dataDir配置所指定的目录下(这个目录必须要存在)创建一个名为myid的文件,假设集群的id为{id1,id2,id3},那么我们可以使用命令:echo "id1">myid,将id1分配给当前的结点,注意这里的{id1,id2,id3}必须是server.id中出现过的id,每个节点被分配的id不能重复。ip指的是集群所在服务器的ip地址,假如是在A、B、C三台物理机上部署集群,其ip分别为ipA、ipB、ipC,那么部署方法是: server.1=ipA:port1:port2 server.2=ipB:port1:port2 server.3=ipC:port1:port2 在ip的后面紧跟着两个端口,第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888。单机部署的时候,集群节点列表中的port1、port2互不相同。(你可以把上面的server.1、server.2、server.3视为一个节点列表)
接下来,进入每个节点的bin目录,例如./zookeeper-1/bin/。然后使用命令:
sh zkServer.sh start
zookeeper的运行日志保存在bin目录下的zookeeper.out中。如果运行失败,可以查看此文件,找到出错的问题再想办法解决。
zookeeper集群搭建时不能马上使用sh zkServer.sh status来查看节点的命令,因为zookeeper节点之间还有一系列的工作需要做。你需要在三个结点都启动之后再等一会儿才能使用该命令来检查各个zookeeper节点是否成功启动。
如上图,Mode:follower表示这是一个从结点,这代表该节点已经启动成功。
Zookeeper集群搭建完毕之后,可以通过客户端脚本连接到zookeeper集群上面,对客户端来说,zookeeper集群是一个整体,连接到zookeeper集群实际上感觉在独享整个集群的服务。
在节点1进行测试:执行命令sh zkCli.sh -server IP:port IP和port是你要连接的目标节点的IP地址和clientport。
如上图表示已经成功连接到zookeeper集群了,要退出客户端只需要输入quit,回车即可。
3.kafka集群搭建
下载项目的压缩包,在服务器上创建三个文件夹(单机),每个目录里包含的内容都是一样的,只有配置上会有所不同,如下:
上面一共有3个目录,依次进入,修改config子目录下broker的配置文件:server.properties。修改完成后,依次进入三个目录的子目录bin目录执行命令:
sh ./bin/kafka-server-start.sh -daemon ./config/server.properties #具体的命令执行要看你当时所处的位置
然后使用jps命令可以查看你的kafka集群是否启动成功。
搭建kafka集群的操作主要是配置的问题,一个是zookeeper的相关配置,另一个是logs存储路径的配置。其它没什么了。