2021windows虚拟机搭建kafka集群详细步骤+可能出现的bug+重新部署(带图,超详细,亲测有效)
作者:互联网
搭建kafka集群需要配合zookeeper使用,有两种选择,第一种是使用kafka自带的zookeeper,第二种是自己安装指定zookeeper,墙裂推荐使用第二种.
第一章 具体搭建步骤:
第一步:安装zookeeper
这里使用的是zookeeper-3.6.3,直接去管网下载即可
第二步:配置zookeeper
(1)下载解压完成后,来到conf文件夹下,有一个 zoo_sample.cfg 官方默认的配置文件。复制一份,重命名为 zoo.cfg
(2)配置,打开zoo.cfg 修改配置信息
dataDir=../zkData
dataLogDir=../zkLog
clientPort=2181
修改完新增下列属性:
admin.serverPort=8000
server.1=127.0.0.1:12888:1388
server.2=127.0.0.1:12889:1389
server.3=127.0.0.1:12887:1387
如下图所示:
这里值得留意的是:
127.0.0.1是服务器的地址
1288x指的是这个服务器与集群中的leader服务器交换信息的端口(集群与集群之间信息交互用的)
138x指的是leader挂掉时专门用来进行选举leader所用的端口
(3)复制两份刚刚配置好的zookeeper文件夹,命名如:
(4)分别修改刚粘贴文件夹下的zoo.cfg文件中的clientPort和admin.serverPort属性,保证唯一
clientPort=2182
admin.serverPort=8001
clientPort=2183
admin.serverPort=8002
(5)在配置的dataDir目录下面新建一个 myid 文件,文件内容就是对应的id号
zookeeper-3.6.3程序 myid 文件的内容 为 1
zookeeper-3.6.3-2程序 myid 文件的内容 为 2
zookeeper-3.6.3-3程序 myid 文件的内容 为 3
我这边配置的目录是
注意,version-2是自动生成的,不用管它
(6)启动zookeeper
分别进入到各个zookeeper文件夹下的bin目录下,双击zkServer.cmd即可.
值得注意的是,当启动前面两个zookeeper时,会报如下错误
这是正常的,因为zookeeper本身就是相互注册的
第三步.安装kafka
这里使用的是kafka_2.12-2.5.0,直接去管网下载即可
第四步.配置kafka
解压后到config文件夹下 打开server.properties配置文件进行配置,修改或新增以下配置信息, 与zookeeper类似,复制两份出来,再更改它们不一样的地方即可.
broker.id=0(另外两个分别为1,2)
listeners=PLAINTEXT://192.168.2.99:9092(另外两个分别为9093,9094)
port=9092(另外两个分别为9093,9094)
host.name=192.168.2.99(服务器地址)
log.dirs=/tmp/kafka-logs-0(另外两个分别为/tmp/kafka-logs-1,/tmp/kafka-logs-2)
log.retention.hours=72
zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
第五步.启动对应的kafka
进入到bin/windows目录下 启动kafka并指定配置文件:
kafka-server-start.bat ../../config/server.properties
至此,服务器搭建kafka集群就完成了.
第二章 校验kafka集群是否搭建成功
第一步.在kafka集群上创建一个topic
集群环境正确创建topic命令如下:
kafka-topics.bat --create --zookeeper 192.168.2.99:2181,192.168.2.99:2182,192.168.2.99:2183 --replication-factor 1 --partitions 1 --topic test600
第二步.查看是否创建成功
kafka-topics.bat --list --zookeeper 192.168.2.99:2181
第三步.往刚创建好的topic上发送(生产)消息
kafka-console-producer.bat --broker-list 192.168.2.99:9092,192.168.2.99:9093,192.168.2.99:9094 --topic test600
第四步.在任意节点上消费消息
kafka-console-consumer.bat --bootstrap-server 192.168.2.99:9092,192.168.2.99:9093,192.168.2.99:9094 --topic test600 --from-beginning
命令建议直接复制粘贴,否则很容易多一个或者少一个空格!
当消费者可以即时接收到生产者生产的消息时,代表kafka集群搭建成功,如下所示:
第三章 重新部署kafka集群
如果kafka集群出现问题,无需保留之前的消息数据时,则按如下步骤重新部署:
1.先删除C:\tmp\下的三个日志文件
2.再去到每个zookeeper配置文件中,删除掉zkData文件夹下的version-2文件夹(只保留myid文件)
3.再删除zkLog文件夹下的内容
4.先启动zookeeeper
去到对应的bin目录下分别启动每个zookeeper: zkServer.cmd(双击这个cmd文件即可, 启动前面两个会报Connection refused:connect错误为正常现象,因为三个zookeeper是互相注册的)
5.再启动kafka:
进入到bin/windows目录下 启动kafka并指定配置文件: kafka-server-start.bat ../../config/server.properties
注意,必须是先启动zookeeper再启动kafka
第四章 不同环境可能出现的bug及解决方案
(1).存储空间不足,无法处理此命令
Caused by: java.io.I0Exception:存储空间不足,无法处理此命令.
at java.io.FileOutputStream.writeBytes<Native Method>
at java.io.FileOutputStream.write<FileOutputStream.java:326>
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221>
解决办法:
将三个kafka配置文件中log.retention.hours=72数值都改小一些,再重新部署即可
(2).页面文件太小,无法操作
Java HotSpot<TM> 64-bit SererVM warning:INFO: os::commit_memory<0x00000000c0000000,1073741824,0> failed;error='页面文件太小,无法操作。'......
解决办法:
打开kafka安装位置,在bin/windows下找到kafka-server-start.bat文件,将
set KAFKA_HEAP_OPTS=-Xmx1G -Xms1G 改为
set KAFKA_HEAP_OPTS=-Xmx256M -Xms128M
注意:有操作系统位数的区别,是32位系统修改32位的,是64位修改64位的
(3).项目代码连kafka集群时,报报Connection refused
java.net.ConnectException: Connection refused: no further information
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739)
at org.apache.kafka.common.network.PlaintextTransportLayer.finishConnect(PlaintextTransportLayer.java:51)
at org.apache.kafka.common.network.KafkaChannel.finishConnect(KafkaChannel.java:73)
at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:323)
at org.apache.kafka.common.network.Selector.poll(Selector.java:291)
at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:260)
at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:236)
at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:148)
at java.lang.Thread.run(Thread.java:745)
解决办法:
Kafka报Connection refused错,大半原因都是因为配置文件配置错误(要么配置ip有问题,要么是端口问题),IP和端口没错,那么确认防火墙是否关闭(防火墙开启也会Connection refused),如果确认防火墙已经关闭,那么根据第一章第四步,检查Kafka的配置是否正确
(4).项目代码获取尝试消费kafka集群消息时,获取不到却也不报错
解决办法:
启动时应先启动消费者,再启动生产者.
创作不易,感谢观看,记得保存收藏哦
标签:2.99,java,--,虚拟机,zookeeper,带图,kafka,192.168,详细 来源: https://blog.csdn.net/ManCxyster/article/details/118339830