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 | cd /home/zookeeper1/zookeeper-3.4.14 |
分别执行以下命令copy配置文件,以zookeeper1为例:
1 | cd /home/zookeeper1/zookeeper-3.4.14/conf |
然后在zoo.cfg配置文件中分别设置数据和日志存放路径,以zookeeper1为例:
1 | dataDir=/home/zookeeper1/zookeeper-3.4.14/data |
3.运行以下命令分别创建zookeeper myid文件:
1 | cd /home/zookeeper1/zookeeper-3.4.14/data |
输入1,按Esc+:wq保存退出。
1 | cd /home/zookeeper2/zookeeper-3.4.14/data |
输入2,按Esc+:wq保存退出。
1 | cd /home/zookeeper3/zookeeper-3.4.14/data |
输入3,按Esc+:wq保存退出。
注意:myid是zookeeper服务下的标识,myid内容不能重复。
4.分别修改zoo.cfg配置文件信息,配置集群节点:
vim /home/zookeeper1/zookeeper-3.4.14/conf/zoo.cfg
修改zookeeper1的运行端口号为2181,并在尾部添加如下集群节点信息:
1 | server.1=127.0.0.1:2888:3888 |
注意: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 | server.1=127.0.0.1:2888:3888 |
vim /home/zookeeper3/zookeeper-3.4.14/conf/zoo.cfg
修改zookeeper3的运行端口号为2183,并在尾部添加如下集群节点信息:
1 | server.1=127.0.0.1:2888:3888 |
5.分别启动三个zookeeper并查看状态,以zookeeper1为例:
1 | cd /home/zookeeper1/zookeeper-3.4.14/bin |
启动图片分别如下:
查询状态图片分别如下:
其中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 | broker.id=0 //需要保证每一台kafka都有一个独立的broker |
(2)vim /home/kafka2/kafka_2.13-2.4.0/config/server.properties
修改内容如下:
1 | broker.id=1 //需要保证每一台kafka都有一个独立的broker |
(3)vim /home/kafka3/kafka_2.13-2.4.0/config/server.properties
修改内容如下:
1 | broker.id=2 //需要保证每一台kafka都有一个独立的broker |
4.在确保zookeeper集群已经启动的情况下启动kafka集群:
分别进入项目根目录执行以下命令启动kafka:
1 | bin/kafka-server-start.sh config/server.properties |
启动后效果如下:
每张图片最下面的brokerId即为不同的服务标识。