linux搭建zookeeper+kafka集群

一、zookeeper和kafka简介

(1)ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列等功能。
原文链接:https://blog.csdn.net/weijifeng_/article/details/79775738

在zookeeper的集群模式中,当超过半数的服务器正常运行时,整个集群才能够正常运行。如:当集群机器数量为3时,当一台服务器挂掉,正常运行的服务器数还有2台,集群依旧可以正常服务,再挂掉一台就不能正常服务了。

为什么推荐奇数台机器呢?当集群机器数量为4时,集群最多允许挂掉一台服务器(挂掉2台,集群中正常运行的服务器没超过半数),而集群机器数量为3时,也是最多允许挂掉一台服务器,在可靠性相同的情况下,选择3台比选择4台会减少一台服务器的资源。

因为资源有限,本文采用伪分布式集群模式,即一台机器分别安装部署3个zookeeper(Linux系统),且版本号为3.4.14。

(2)Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

主要应用场景是:日志收集系统和消息系统。

Kafka主要设计目标如下:
以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
同时支持离线数据处理和实时数据处理。
支持在线水平扩展。
原文链接:https://www.cnblogs.com/frankdeng/p/9310684.html

因为资源有限,本文采用伪分布式集群模式,即一台机器分别安装部署3个kafka(Linux系统),且版本号为kafka_2.13-2.4.0。

二、zookeeper集群的部署

1.在官网http://mirror.bit.edu.cn/apache/zookeeper/
下载zookeeper压缩包后分别复制并解压到home目录下的zookeeper1,zookeeper2,和zookeeper3文件夹下。

2.分别在/home/zookeeper1/zookeeper-3.4.14/,/home/zookeeper2/zookeeper-3.4.14/,/home/zookeeper3/zookeeper-3.4.14/目录下创建data文件夹(用于存放zookeeper数据)和logs文件夹(用于存放日志文件)。以zookeeper1为例:

1
2
3
cd /home/zookeeper1/zookeeper-3.4.14
mkdir data
mkdir logs

分别执行以下命令copy配置文件,以zookeeper1为例:

1
2
cd /home/zookeeper1/zookeeper-3.4.14/conf
cp zoo_sample.cfg zoo.cfg

然后在zoo.cfg配置文件中分别设置数据和日志存放路径,以zookeeper1为例:

1
2
dataDir=/home/zookeeper1/zookeeper-3.4.14/data
dataLogDir=/home/zookeeper1/zookeeper-3.4.14/logs

3.运行以下命令分别创建zookeeper myid文件:

1
2
3
cd /home/zookeeper1/zookeeper-3.4.14/data
touch myid
vim myid

输入1,按Esc+:wq保存退出。

1
2
3
cd /home/zookeeper2/zookeeper-3.4.14/data
touch myid
vim myid

输入2,按Esc+:wq保存退出。

1
2
3
cd /home/zookeeper3/zookeeper-3.4.14/data
touch myid
vim myid

输入3,按Esc+:wq保存退出。

注意:myid是zookeeper服务下的标识,myid内容不能重复。

4.分别修改zoo.cfg配置文件信息,配置集群节点:
vim /home/zookeeper1/zookeeper-3.4.14/conf/zoo.cfg
修改zookeeper1的运行端口号为2181,并在尾部添加如下集群节点信息:

1
2
3
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

注意:server.X=A:B:C 其中X是一个数字, 表示这是第几号server。A是该server所在的IP地址,B配置该server和集群中的leader交换消息所使用的端口,C配置选举leader时所使用的端口.。如果配置的是伪集群模式, 那么各个server的B,C参数必须不同。

vim /home/zookeeper2/zookeeper-3.4.14/conf/zoo.cfg
修改zookeeper2的运行端口号为2182,并在尾部添加如下集群节点信息:

1
2
3
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

vim /home/zookeeper3/zookeeper-3.4.14/conf/zoo.cfg
修改zookeeper3的运行端口号为2183,并在尾部添加如下集群节点信息:

1
2
3
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

5.分别启动三个zookeeper并查看状态,以zookeeper1为例:

1
2
3
cd /home/zookeeper1/zookeeper-3.4.14/bin
./zkServer.sh start
./zkServer.sh status

启动图片分别如下:

查询状态图片分别如下:

其中Mode:leader表示主机器,Mode:follower表示从机器,可参考以下集群角色介绍:
截图

三、kafka的部署

1.在官网http://kafka.apache.org/downloads下载kafka压缩包后分别复制并解压到home目录下的kafka1,kafka2,和kafka3文件夹下。

2.分别在/home/kafka1/kafka_2.13-2.4.0/,/home/kafka2/kafka_2.13-2.4.0/,/home/kafka3/kafka_2.13-2.4.0/目录下创建logs文件夹(用于存放日志文件)。
教程和上方zookeeper类似。

3.分别修改配置文件:
(1)vim /home/kafka1/kafka_2.13-2.4.0/config/server.properties
修改内容如下:

1
2
3
broker.id=0           //需要保证每一台kafka都有一个独立的broker
listeners=PLAINTEXT://127.0.0.1:9092 //ip地址为本地的9092端口log.dirs=/home/kafka1/kafka_2.13-2.4.0/logs //数据存放的目录
zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 //zookeeper的连接地址信息

(2)vim /home/kafka2/kafka_2.13-2.4.0/config/server.properties
修改内容如下:

1
2
3
broker.id=1           //需要保证每一台kafka都有一个独立的broker
listeners=PLAINTEXT://127.0.0.1:9093 //ip地址为本地的9092端口log.dirs=/home/kafka2/kafka_2.13-2.4.0/logs //数据存放的目录
zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 //zookeeper的连接地址信息

(3)vim /home/kafka3/kafka_2.13-2.4.0/config/server.properties
修改内容如下:

1
2
3
broker.id=2           //需要保证每一台kafka都有一个独立的broker
listeners=PLAINTEXT://127.0.0.1:9094 //ip地址为本地的9092端口log.dirs=/home/kafka3/kafka_2.13-2.4.0/logs //数据存放的目录
zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 //zookeeper的连接地址信息

4.在确保zookeeper集群已经启动的情况下启动kafka集群:
分别进入项目根目录执行以下命令启动kafka:

1
bin/kafka-server-start.sh config/server.properties

启动后效果如下:


每张图片最下面的brokerId即为不同的服务标识。