做这件事的原因
公司业务特性需要对架构下游数据队列进行替换改造,用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:38883.使用命令启动
[web@dev-kafka-01 zookeeper-3.4.14]$ ./bin/zkServer.sh start4.检查程序是否启动
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安装步骤参考如下链接:
另外编译过程确实十分漫长,我这边编译了一个包,上传到了百度云盘:
https://pan.baidu.com/s/19APT4Gykf5oD2O4zRUJHGQ 密码:x3rskafka-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