三台服务器配置简易Kafka集群+debug记录

发布时间 2023-07-14 15:00:53作者: rthete

使用了3台阿里云服务器做实验,搭建kafka集群,可以通过java程序生产消息到云服务器。中途遇到许多问题,仅在此记录一些配置信息,安装过程省略。

服务器信息

host name 私网IP 公网IP
server001 172.24.16.132 60.205.217.197
server002 172.17.67.38 59.110.155.165
server003 172.22.192.85 60.205.221.167

host name需要自己修改

注意:2181端口以及9092端口一定要开放,先telnet端口进行连接测试

hosts配置

格式为:私网IP host.name

172.24.16.132 server001
172.17.67.38 server002
172.22.192.85 server003

Zookeeper配置

配置过程略去,此处仅提供zookeeper/conf/zoo.cfg文件的配置:

server.1=server001:2888:3888
server.2=server002:2888:3888
server.3=server003:2888:3888

Kafka配置

server.properties

#其他两台为1、2
broker.id=0

#listeners=PLAINTEXT://本机的私网IP:9092
listeners=PLAINTEXT://172.24.16.132:9092

#advertised.listeners=PLAINTEXT://本机的公网IP:9092
advertised.listeners=PLAINTEXT://60.205.217.197:9092

#主机名:2181
zookeeper.connect=server001:2181,server002:2181,server003:2181

delete.topic.enable=true

producer.properties以及consumer.properties

#添加bootsraps.servers,此处填写公网IP
bootstrap.servers=60.205.217.197:9092,59.110.155.165:9092,60.205.221.167:9092

配置文件修改完成后在server001创建生产者,server002创建消费者进行测试:

连接成功。

其他问题debug过程

1 kafka启动后自动关闭

查看kafka/logs/server.log日志文件中是否有ERROR,可能报的错误:

a. Unable to connect to zookeeper server within timeout: 6000

→检查端口是否开放

→我的情况:之前配置kafka时zookeeper.connect设置为公网IP,报了这个错误。

改为私网IP后产生了新的错误:

b. Socket server failed to bind to 公网IP:9092: Cannot assign requested address.

之前server.properties中没有写listeners,遂添加

listeners=PLAINTEXT://本机私网IP:9092

kafka可以正常启动。

!!也可能是因为服务器内存过低,导致kafka无法正常运行。

2 topic中leader为-1

解决办法:手动指定leader。

进入zookeeper:

zookeeper/bin/zkCli.sh -server server001:2181

查看topic信息:

get /brokers/topics/test-topic2/partitions/0/state

修改leader:

set /brokers/topics/test-topic2/partitions/0/state {"controller_epoch":25,"leader":2,"version":1,"leader_epoch":20,"isr":[2]}

最后重启kafka服务。

3 命令行创建生产者消费者时失败

报错:Error while fetching metadata with correlation id : {LEADER_NOT_AVAILABLE}

说明配置中listener等不正确,我的情况是服务器端口没有开放,导致连接不了。