通过 Zookeeper 搭建 Kafka 集群

软件准备:

1.在 Zookeeper 官网上下载搭建集群所需软件 Zookeeper:

https://zookeeper.apache.org/releases.html#download

2.在 Kafka 官网上下载搭建集群所需软件 Kafka:

http://kafka.apache.org/downloads

                                                      

正文:

Zookeeper 简介:
Zookeeper 是 Google 的一个开源项目,是一个分布式应用协调服务,是 Hadoop 和 Hbase 的重要组件

Zookeeper 的作用:
Zookeeper 可以实现 Kafka 和 Hadoop 等服务器的高可用和管理。Kafka通过Zookeeper管理集群配置,选举Leader,Kafka必须需要Zookeeper才能形成。

Kafka 简介:
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写,具有高吞吐量和分布式的特点,是一个分布式发布订阅消息系统,是一个消息中间件。

Kafka 的作用:
可以处理消费者规模的网站中的所有动作流数据。能够实现:解耦、冗余、提高扩展性、缓冲、保证顺序,灵活,削峰填谷、异步通信。
(补充:消息队列类似一个缓冲区,a程序需要将信息传送到b程序,但是b程序还在忙无法接收,这样a程序就可以先将信息存放在消息队列里,这样b程序也不用台在意a程序的接口了,因为他直接消息队列取数据。在数据库查数据也是这样,先将查询请求放在消息队列里,消息队列再从数据库里查数据。压高并发的方法就是者六字真言:读缓存,写队列)

kafka角色与集群结构:
producer:生产者,负责发布消息
consumer:消费者,负责读取处理消息
topic:消息的类别
Parition:每个Topic包含一个或多个Partition
Broker:Kafka集群包含一个或多个服务器

步骤目录:
步骤一:拓扑规划
1.1 服务器列表

步骤二:搭建 Zookeeper 的基础环境
2.1 按照拓扑规划配置好各台服务器的 ip 地址
2.2 在 nn01 上配置能够免密钥登录 node1、node2、node3
2.3 配置各台服务器域名与主机名的对应关系
2.4 在每台服务器上安装 java-1.8.0-openjdk-devel

步骤三:部署 Zookeeper
3.1 将 zookeeper 解压拷贝到 /usr/local/zookeeper
3.2 配置文件改名,并在最后添加配置
3.3 拷贝 /usr/local/zookeeper 到其他集群主机
3.4 创建 mkdir /tmp/zookeeper,每一台都要
3.5 创建 myid 文件,id 必须与配置文件里主机名对应的 server.(id) 一致
3.6 启动服务,单启动一台无法查看状态,需要启动全部集群以后才能查看状态,每一台上面都要手工启动(以nn01为例子)

步骤四:查看 zookeeper 的状态

步骤五:搭建 Kafka 集群实验
5.1 解压 kafka 压缩包
5.2 把 kafka 拷贝到 /usr/local/kafka 下面
5.3 修改配置文件 /usr/local/kafka/config/server.properties
5.4 拷贝 kafka 到其他主机,并修改 broker.id ,不能重复
5.5 启动 kafka 集群(node1,node2,node3 启动)

步骤六:验证 kafka
6.1 创建一个 topic
6.2 模拟生产者,发布消息
6.3 模拟消费者,接收消息

具体的操作步骤:
步骤一:拓扑规划
1.1 服务器列表
服务器名称  ip 地址
nn01    192.168.1.21
node1   192.168.1.22 
node2   192.168.1.23 
node3   192.168.1.24 

步骤二:搭建 Zookeeper 的基础环境
2.1 按照拓扑规划配置好各台服务器的 ip 地址
(步骤略)

2.2 在 nn01 上配置能够免密钥登录 node1、node2、node3
(步骤略)

2.3 配置各台服务器域名与主机名的对应关系
[root@nn01 hadoop]# vim /etc/hosts
192.168.1.21  nn01
192.168.1.22  node1
192.168.1.23  node2
192.168.1.24  node3

[root@nn01 hadoop]# for i in {22..24}  \
do    \
scp /etc/hosts 192.168.1.$i:/etc/    \
done        #同步配置

2.4 在每台服务器上安装 java-1.8.0-openjdk-devel
[root@nn01 hadoop]# for i in {22..24}
do
ssh 192.168.1.$i " yum -y install java-1.8.0-openjdk-devel "
done

步骤三:部署 Zookeeper
3.1 将 zookeeper 解压拷贝到 /usr/local/zookeeper
[root@nn01 hadoop]# tar -xf zookeeper-3.4.10.tar.gz 
(zookeeper-3.4.10.tar.gz 可以在本文开头下载)
[root@nn01 hadoop]# mv zookeeper-3.4.10 /usr/local/zookeeper

3.2 配置文件改名,并在最后添加配置
[root@nn01 hadoop]# cd /usr/local/zookeeper/conf/
[root@nn01 hadoop]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[root@nn01 conf]# mv zoo_sample.cfg  zoo.cfg
[root@nn01 conf]# chown root.root zoo.cfg
[root@nn01 conf]# vim zoo.cfg
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
server.4=nn01:2888:3888:observer

3.3 拷贝 /usr/local/zookeeper 到其他集群主机
[root@nn01 conf]# for i in {22..24}; do rsync -aSH --delete /usr/local/zookeeper/ 192.168.1.$i:/usr/local/zookeeper  -e 'ssh' & done
[4] 4956
[5] 4957
[6] 4958

3.4 创建 mkdir /tmp/zookeeper,每一台都要
[root@nn01 conf]# mkdir /tmp/zookeeper
[root@nn01 conf]# ssh node1 mkdir /tmp/zookeeper
[root@nn01 conf]# ssh node2 mkdir /tmp/zookeeper
[root@nn01 conf]# ssh node3 mkdir /tmp/zookeeper

3.5 创建 myid 文件,id 必须与配置文件里主机名对应的 server.(id) 一致
[root@nn01 conf]# echo 4 >/tmp/zookeeper/myid
[root@nn01 conf]# ssh node1 'echo 1 > /tmp/zookeeper/myid'
[root@nn01 conf]# ssh node2 'echo 2 > /tmp/zookeeper/myid'
[root@nn01 conf]# ssh node3 'echo 3 > /tmp/zookeeper/myid'

3.6 启动服务,单启动一台无法查看状态,需要启动全部集群以后才能查看状态,每一台上面都要手工启动(以nn01为例子)
[root@nn01 conf]# /usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
注意:刚启动 zookeeper 查看状态的时候报错,启动的数量要保证半数以上,这时再去看就成功了

步骤四:查看 zookeeper 的状态
[root@nn01 conf]# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: observe

[root@nn01 conf]# /usr/local/zookeeper/bin/zkServer.sh stop #关闭之后查看状态其他服务器的角色
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

[root@nn01 conf]# yum -y install telnet
[root@nn01 conf]# telnet node3 2181 
Trying 192.168.1.24...
Connected to node3.
Escape character is '^]'.
ruok #发送
imokConnection closed by foreign host. #imok回应的结果

步骤五:搭建 Kafka 集群实验
5.1 解压 kafka 压缩包
注意:Kafka 在 node1,node2,node3 中随便一个上面操作即可,这里以 node1 为例
[root@node1 ~]# tar -xf kafka_2.10-0.10.2.1.tgz
(kafka_2.10-0.10.2.1.tgz 可以在本文开头下载)

5.2 把 kafka 拷贝到 /usr/local/kafka 下面
[root@node1 ~]# mv kafka_2.10-0.10.2.1 /usr/local/kafka

5.3 修改配置文件 /usr/local/kafka/config/server.properties
[root@node1 ~]# cd /usr/local/kafka/config
[root@node1 config]# vim server.properties
broker.id=22
zookeeper.connect=node1:2181,node2:2181,node3:2181

5.4 拷贝 kafka 到其他主机,并修改 broker.id ,不能重复
[root@node1 config]# for i in 23 24; do rsync -aSH --delete /usr/local/kafka 192.168.1.$i:/usr/local/; done
[1] 27072
[2] 27073
[root@node2 ~]# vim /usr/local/kafka/config/server.properties #node2主机修改
broker.id=23
[root@node3 ~]# vim /usr/local/kafka/config/server.properties #node3主机修改
broker.id=24

5.5 启动 kafka 集群(node1,node2,node3 启动)
[root@node1 local]# /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties 
[root@node1 local]# jps #出现kafka
26483 DataNode
27859 Jps
27833 Kafka
26895 QuorumPeerMain

步骤六:验证 kafka
6.1 创建一个 topic
[root@node1 local]# /usr/local/kafka/bin/kafka-topics.sh --create --partitions 1 --replication-factor 1 --zookeeper node3:2181 --topic aa    
Created topic "aa".

6.2 模拟生产者,发布消息
[root@node2 ~]# /usr/local/kafka/bin/kafka-console-producer.sh \
--broker-list node2:9092 --topic aa #写一个数据
aaa
ddd

6.3 模拟消费者,接收消息
[root@node3 ~]# /usr/local/kafka/bin/kafka-console-consumer.sh \ 
--bootstrap-server node1:9092 --topic aa #这边会直接同步
aaa
ddd