【Kafka学习-2】搭建kafka集群

下载压缩包

Kafka官网下载地址:http://kafka.apache.org/downloads

点击即可下载

安装前准备工作

  1. 准备三台虚拟机
  2. zookeeper集群
  3. Java环境

搭建Kafka集群(重置)

第一步:解压缩

tar zxvf kafka_2.12-3.4.0.tgz

第二步:创建data目录

mkdir data

 第三步:修改配置文件

修改 config 目录下的 server.properties。

vim server.properties

broker.id 是 kafka 节点的唯一标识,这里暂时先不用改。 

listeners 这里解除注释,然后写上本服务器的ip,让其他 kafka 节点能够感知到本节点。

log.dirs 改成刚刚创建的data目录路径。

zookeeper.connect 改成zk集群的所有节点,后面加上/kafka,让其在zk的kafka节点上操作。

第四步:把kafka分发到每台服务器

rsync -rc kafka_2.12-3.4.0 root@192.168.59.129:/kafka/
rsync -rc kafka_2.12-3.4.0 root@192.168.59.130:/kafka/

分别修改一下config的server.properties配置文件,只需修改broker.id和listeners即可。

broker.id改成唯一标识。

 listeners改成本机ip地址。

Kafka集群脚本

启动的时候需要加一段“source /etc/profile”重新加载环境变量,不然会报一个java环境变量的异常。

#!/bin/bash

case $1 in
"start")
        for i in 192.168.59.128 192.168.59.129 192.168.59.130
        do
                echo "-- Starting $i kafka server --"
                sshpass -p "1" ssh $i "source /etc/profile; /kafka/kafka_2.12-3.4.0/bin/kafka-server-start.sh -daemon /kafka/kafka_2.12-3.4.0/config/server.properties"
        done
;;
"stop")
        for i in 192.168.59.128 192.168.59.129 192.168.59.130
        do
                echo "-- Stoping $i kafka server --"
                sshpass -p "1" ssh $i "/kafka/kafka_2.12-3.4.0/bin/kafka-server-stop.sh"
        done
;;
esac

如果jps看不到有kafka的进程,可以到kafka目录下的/logs/kafkaServer.out查看日志。

如果看到类似于如下报错信息:

kafka.common.InconsistentClusterIdException: The Cluster ID 8EemcRWsSLuZJlvD0yVEmw doesn't match stored clusterId Some(THdUEwKFTQiyNzSmy4RWkA) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.
	at kafka.server.KafkaServer.startup(KafkaServer.scala:234)
	at kafka.Kafka$.main(Kafka.scala:115)
	at kafka.Kafka.main(Kafka.scala)

原因是之前运行kafka在该目录下创建了一些主题信息(kafka内部会在用户指定目录下存储许多与保证服务正常工作的相关文件),后来清理了zookeeper的数据及日志后,但是没有对kafka-logs目录位置下的数据进行清理,新启的kafka服务The Cluster ID 8EemcRWsSLuZJlvD0yVEmw 与 meta.properties的旧的cluster.id=THdUEwKFTQiyNzSmy4RWkA 匹配不上,所以报错。

解决办法:删除掉data目录下的meta.properties文件。

所以为了确保脚本运行成功,启动kafka前先删掉meta.properties

最终版本的脚本为:

#!/bin/bash

case $1 in
"start")
        for i in 192.168.59.128 192.168.59.129 192.168.59.130
        do
                echo "-- Starting $i kafka server --"
                sshpass -p "1" ssh $i "rm -rf /kafka/kafka_2.12-3.4.0/data/meta.properties; source /etc/profile; /kafka/kafka_2.12-3.4.0/bin/kafka-server-start.sh -daemon /kafka/kafka_2.12-3.4.0/config/server.properties"
        done
;;
"stop")
        for i in 192.168.59.128 192.168.59.129 192.168.59.130
        do
                echo "-- Stoping $i kafka server --"
                sshpass -p "1" ssh $i "/kafka/kafka_2.12-3.4.0/bin/kafka-server-stop.sh"
        done
;;
"status")
        for i in 192.168.59.128 192.168.59.129 192.168.59.130
        do
                echo "-- $i kafka status: --"
                sshpass -p "1" ssh $i "netstat -nalpt | grep 9092"
        done
esac

修改脚本权限

chmod 777 kf.sh

把脚本发到每一台服务器

rsync -rc kf.sh root@192.168.59.129:/kafka/kf.sh
rsync -rc kf.sh root@192.168.59.130:/kafka/kf.sh

kafka脚本测试

启动kafka集群之前,记得先把zookeeper集群先启动好,不然会启动失败!!!

启动集群

查看集群状态

如果能看到9092的状态是ESTABLISHED,LISTEN,证明节点正在正常运行。

如果是TIME_WAIT,或者没有信息,就说明节点没有在运行。

关闭集群

验证kafka集群是否能相互感知

验证的方法非常简单,创建一个topic。

./kafka-topics.sh --bootstrap-server 192.168.59.128:9092 --topic mytopic1 --create --partitions 1 --replication-factor 3

命令中的参数--replication-factor是关键,其作用是指定在多少个节点备份副本。

我这里有3个节点,像这样能够创建成功topic,说明该topic已经在3个节点都有备份副本,证明集群节点之前能够相互感知,kafka集群搭建成功。

如果不成功的话,会报这样一个异常:InvalidReplicationFactorException: Replication factor: 2 larger than available brokers: 0.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值