本校云计算课程的作业,使用了3个阿里云服务器,搭建kafka集群,可以通过java程序生产消息到云服务器。中途遇到许多问题,仅在此记录一些配置信息,详细的安装过程网上都有,略去。
host name | 私网IP | 公网IP |
---|---|---|
server001 | 172.24.16.132 | 60.xxx.xxx.197 |
server002 | 172.17.67.38 | 59.xxx.xxx.165 |
server003 | 172.22.192.85 | 60.xxx.xxx.167 |
host name需要自己修改
注意:2181端口以及9092端口一定要开放,先telnet端口进行连接测试
格式为:私网IP host.name
172.24.16.132 server001
172.17.67.38 server002
172.22.192.85 server003
配置过程略去,此处仅提供zookeeper/conf/zoo.cfg文件的配置:
server.1=server001:2888:3888
server.2=server002:2888:3888
server.3=server003:2888:3888
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.xxx.xxx.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.xxx.xxx.197:9092,59.xxx.xxx.165:9092,60.xxx.xxx.167:9092
配置文件修改完成后在server001创建生产者,server002创建消费者进行测试:
连接成功。
查看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无法正常运行。
解决办法:手动指定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服务。
报错:Error while fetching metadata with correlation id : {LEADER_NOT_AVAILABLE}
说明配置中listener等不正确,我本人的情况是服务器端口没有开放,导致连接不了。