问题1
启动kafka时报错
[2022-03-09 00:07:17,280] ERROR [KafkaServer id=1] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
org.apache.kafka.common.KafkaException: Socket server failed to bind to a:9092: 无法指定被请求的地址.
at kafka.network.Acceptor.openServerSocket(SocketServer.scala:450)
at kafka.network.Acceptor.<init>(SocketServer.scala:340)
at kafka.network.SocketServer$$anonfun$createAcceptorAndProcessors$1.apply(SocketServer.scala:146)
at kafka.network.SocketServer$$anonfun$createAcceptorAndProcessors$1.apply(SocketServer.scala:142)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
at kafka.network.SocketServer.createAcceptorAndProcessors(SocketServer.scala:142)
at kafka.network.SocketServer.startup(SocketServer.scala:91)
at kafka.server.KafkaServer.startup(KafkaServer.scala:250)
at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:38)
at kafka.Kafka$.main(Kafka.scala:75)
at kafka.Kafka.main(Kafka.scala)
Caused by: java.net.BindException: 无法指定被请求的地址
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)
at kafka.network.Acceptor.openServerSocket(SocketServer.scala:446)
... 11 more
原因:
server.properties配置文件中监听地址指向了一个
解决办法:
修改kafka/config/server.properties文件中的listeners=PLAINTEXT://hostname:9092,注意其中hostname应为本机的地址,也就是说应为每台机器的ip
问题2
[2022-03-09 00:02:37,098] ERROR Exiting Kafka due to fatal exception (kafka.Kafka$)
java.nio.file.NoSuchFileException: config/server.properties
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.Files.newByteChannel(Files.java:407)
at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
at java.nio.file.Files.newInputStream(Files.java:152)
at org.apache.kafka.common.utils.Utils.loadProps(Utils.java:560)
at kafka.Kafka$.getPropsFromArgs(Kafka.scala:42)
at kafka.Kafka$.main(Kafka.scala:58)
at kafka.Kafka.main(Kafka.scala)
原因:
启动命令位置不对
解决办法:
去kafka的根目录下启动
[root@b kafka]# bin/kafka-server-start.sh config/server.properties
问题3
创建topic时报错
Error while executing topic command : Replication factor: 1 larger than available brokers: 0.
[2022-03-09 00:14:42,185] ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 1 larger than available brokers: 0.
原因:
访问地址不正确
解决办法:
查看server.properties中的zookeeper.connect=a:2181,b:2181,c:2181看后面有没有/kafka,以前版本是有/kafka的,所以创建topic就需要加上
kafka-topics.sh --zookeeper localhost:2181/kafka --create --topic topic-demo --partitions 1 --replication-factor 1
如果没有/kafka,则:
kafka-topics.sh --zookeeper localhost:2181 --create --topic topic-demo --partitions 1 --replication-factor 1
问题4
消费报错
生产:
kafka-console-producer.sh --broker-list localhost:9092 --topic topic-demo
消费:
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-demo --from-beginning
[2022-03-09 00:42:40,715] WARN [Producer clientId=console-producer] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
原因:server.properties文件中监听的地址虽然写的是本机ip:192.168.xx.xx,但是生产ip写的localhost,消费也写的localhost,导致监听地址不同
解决办法:
listeners=PLAINTEXT://host:9092中host都统一
总之:监听,创建topic,生产,消费中ip需一致
总结
久病成医