Kafka2.2.1集群搭建

1,267 阅读3分钟
做这件事的原因

公司业务特性需要对架构下游数据队列进行替换改造,用kafka消息引擎来替换不能进行大量数据堆积的rabbitMQ。为了防止遗忘,也为了给大家一个参考(这方面网上的资料并不是特别多)。关于kafka的一些优点就不泛泛而谈了,感兴趣的同学可以自己去了解下,本文只是架构落地的实施方案。


环境准备

1.准备3台云主机,修改它们的/etc/hosts,保证3台机器可以通过hostname互通网络。

#将3台机器的IP及hostname放到 /etc/hosts 中
192.168.2.163  dev-kafka-01  
192.168.2.123  dev-kafka-02  
192.168.2.9    dev-kafka-03  

2.安装JDK

使用apt或者yum安装jdk1.8

3.关闭防火墙,云主机的话检查下安全组。另外如果是centos7的话,检查下selinux,关闭它。



开始具体的搭建步骤

首先搭建zookeeper集群,kafka需要依赖zookeeper

1.zookeeper官网 zookeeper.apache.org/ 下载压缩包解压,这里我使用的版本是zookeeper-3.4.14

2.修改zk的配置文件

[web@dev-kafka-01 zookeeper-3.4.14]$ mv conf/zoo_sample.cfg zoo.cfg

[web@dev-kafka-01 zookeeper-3.4.14]$ vi conf/zoo.cfg  
#设置自定义的数据data目录
dataDir=/data/server-data/zookeeper
#zookeeper nodes address
#zookeeper 节点的地址及端口
server.1=192.168.2.163:2888:3888
server.2=192.168.2.123:2888:3888
server.3=192.168.2.9:2888:3888

在centos中,节点的地址填IP不要填hostname,不然会导致本地节点绑定到127.0.0.1上,无法与其它节点连接

3.使用命令启动

[web@dev-kafka-01 zookeeper-3.4.14]$ ./bin/zkServer.sh start


4.检查程序是否启动

sudo jps
#查看是否有QuorumPeerMain进程,如果有说明zk进程已经启动成功了。

5.按照以上4个步骤,将剩余两台机器安装好zookeeper

6.检查zookeeper集群状态

[web@dev-kafka-01 zookeeper-3.4.14]$ ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/server-side/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
##########################
[web@dev-kafka-02 zookeeper-3.4.14]$ ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/server-side/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader
##########################
[web@dev-kafka-03 zookeeper-3.4.14]$ ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/server-side/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower


然后搭建kafka集群

1.从kafka官网 kafka.apache.org/  下载压缩包解压,这里我使用的kafka版本是2.2.1;

[web@dev-kafka-01 ~]$ tar -xvf kafka_2.12-2.2.1.tgz
[web@dev-kafka-03 ~]$ mv kafka_2.12-2.2.1 kafka

2.修改配置文件

[web@dev-kafka-03 kafka]$ vi config/server.properties 

#修改broker ID 在这里我按照机器的编号对应 
#dev-kafka-01  broker.id=0
#dev-kafka-02  broker.id=1
#dev-kafka-03  broker.id=2
broker.id=2

#数据目录
log.dirs=/data/server-data/kafka

#zookeeper连接地址
zookeeper.connect=dev-kafka-01:2181,dev-kafka-02:2181,dev-kafka-03:2181

3.以守护进程的方式启动

[web@dev-kafka-03 kafka]$ ./bin/kafka-server-start.sh -daemon /data/server-side/kafka/config/server.properties 

4.按照以上3个步骤将其它2台机器起起来,并通过jps命令检查

sudo jps
#查看是否有Kafka进程,如果有说明kafka进程已经启动成功了。


manager插件选型及安装

之前公司一直使用rabbitMQ自带的manager页面,可视化带来的好处就是减轻运维难度,开发也能直观的看到消息队列的拥堵情况。

所以在上kafka之前,进行了manager相关插件的选型,综合考虑了一下,决定采用雅虎的kafka-manager,目前已经支持到kafka2.2.0。

顺便提一下,对于几十人的小团队来说,一般会上manager之类的东西,但是正规化的公司可能会要求不用这个,主要也是为了安全。他们可能只会去用一些原生的命令和java调用,监控方面会结合kafka-api接口及比较流行的Prometheus+Grafana~


kafka-manager安装步骤参考如下链接:

www.cnblogs.com/frankdeng/p… 


另外编译过程确实十分漫长,我这边编译了一个包,上传到了百度云盘:

https://pan.baidu.com/s/19APT4Gykf5oD2O4zRUJHGQ  密码:x3rs

kafka-manager我使用最新的2.0.0.2,因为kafka-manager社区更新的不是很积极,所以用比较新的版本,好兼容较新的kafka版本。当前kafka-manager支持的kafka版本最高为2.2.0,测试了下我安装的kafka2.2.1也是可以用的。至此,kafka集群安装完毕。

题外话:

在极客时间胡夕的“Kafka核心技术与实战”这门课上获得了一个新的信息~ kafka在2.4版本做了一个调整,规避了broker端为执行校验而做的解压缩操作, 感兴趣的话可以了解下~

具体的issues地址:https://issues.apache.org/jira/browse/KAFKA-8106