Kafka + Zookeeper:无法建立到节点 -1 的连接。经纪人可能不可用
Posted
技术标签:
【中文标题】Kafka + Zookeeper:无法建立到节点 -1 的连接。经纪人可能不可用【英文标题】:Kafka + Zookeeper: Connection to node -1 could not be established. Broker may not be available 【发布时间】:2018-05-20 12:38:28 【问题描述】:我在我的本地主机中运行 Zookeeper 和 Kafka(各 1 个实例)。
我从 kafka 成功创建了一个主题:
./bin/kafka-topics.sh --zookeeper localhost:2181 --create --replication-factor 1 --partitions 1 --topic Hello-Nicola
Created topic "Hello-Nicola".
Kafka日志显示:
[2017-12-06 16:00:17,753] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
[2017-12-06 16:03:19,347] INFO [ReplicaFetcherManager on broker 0] Removed fetcher for partitions Hello-Nicola-0 (kafka.server.ReplicaFetcherManager)
[2017-12-06 16:03:19,393] INFO Loading producer state from offset 0 for partition Hello-Nicola-0 with message format version 2 (kafka.log.Log)
[2017-12-06 16:03:19,406] INFO Completed load of log Hello-Nicola-0 with 1 log segments, log start offset 0 and log end offset 0 in 35 ms (kafka.log.Log)
[2017-12-06 16:03:19,408] INFO Created log for partition [Hello-Nicola,0] in /tmp/kafka-logs with properties compression.type -> producer, message.format.version -> 1.0-IV0, file.delete.delay.ms -> 60000, max.message.bytes -> 1000012, min.compaction.lag.ms -> 0, message.timestamp.type -> CreateTime, min.insync.replicas -> 1, segment.jitter.ms -> 0, preallocate -> false, min.cleanable.dirty.ratio -> 0.5, index.interval.bytes -> 4096, unclean.leader.election.enable -> false, retention.bytes -> -1, delete.retention.ms -> 86400000, cleanup.policy -> [delete], flush.ms -> 9223372036854775807, segment.ms -> 604800000, segment.bytes -> 1073741824, retention.ms -> 604800000, message.timestamp.difference.max.ms -> 9223372036854775807, segment.index.bytes -> 10485760, flush.messages -> 9223372036854775807. (kafka.log.LogManager)
[2017-12-06 16:03:19,409] INFO [Partition Hello-Nicola-0 broker=0] No checkpointed highwatermark is found for partition Hello-Nicola-0 (kafka.cluster.Partition)
[2017-12-06 16:03:19,411] INFO Replica loaded for partition Hello-Nicola-0 with initial high watermark 0 (kafka.cluster.Replica)
[2017-12-06 16:03:19,413] INFO [Partition Hello-Nicola-0 broker=0] Hello-Nicola-0 starts at Leader Epoch 0 from offset 0. Previous Leader Epoch was: -1 (kafka.cluster.Partition)
但 Zookeeper 日志显示:
2017-12-06 16:03:19,299 [myid:] - INFO [ProcessThread(sid:0 cport:2181)::PrepRequestProcessor@653] - Got user-level KeeperException when processing sessionid:0x1000177fb3d0001 type:create cxid:0x43 zxid:0x26 txntype:-1 reqpath:n/a Error Path:/brokers/topics/Hello-Nicola/partitions/0 Error:KeeperErrorCode = NoNode for /brokers/topics/Hello-Nicola/partitions/0
2017-12-06 16:03:19,302 [myid:] - INFO [ProcessThread(sid:0 cport:2181)::PrepRequestProcessor@653] - Got user-level KeeperException when processing sessionid:0x1000177fb3d0001 type:create cxid:0x44 zxid:0x27 txntype:-1 reqpath:n/a Error Path:/brokers/topics/Hello-Nicola/partitions Error:KeeperErrorCode = NoNode for /brokers/topics/Hello-Nicola/partitions
如果我尝试生成消息:
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic Hello-Nicola
>ciao
[2017-12-06 16:04:21,897] WARN [Producer clientId=console-producer] Connection to node -1 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2017-12-06 16:04:22,000] WARN [Producer clientId=console-producer] Connection to node -1 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
server.properties(在 kafka 中)是:
broker.id=0
listeners=PLAINTEXT://mylocal-0:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
Zookeeper 似乎没有注册任何代理。
有什么建议吗?
【问题讨论】:
从代理日志看,一切正常,它检测到主题创建并成功在磁盘上创建日志。你能发布你的经纪人配置吗? 我在帖子中添加了这些信息。谢谢 这里有任何快速帮助 - ***.com/questions/67763076/…? 【参考方案1】:UPD:如果您在单节点模式下运行:
我在尝试部署应用程序时在 spark 控制台日志中看到了此消息。通过在server.properties中更改此参数解决:
listeners=PLAINTEXT://myhostname:9092
到
listeners=PLAINTEXT://localhost:9092
确保您的 java 进程使用 netstat -lptu
在 9092 上侦听【讨论】:
localhost
意味着您只有一个经纪人,对吧?
如果您尝试运行独立/单节点并且您有一些 *** 软件,如果您不指定 listeners
,则默认使用的 InetAddress.getLocalHost().getCanonicalHostName()
很可能会解析为一些无效的 IP 地址。在这种情况下,您需要显式设置listeners=PLAINTEXT://localhost:9092
当我通过 brew 安装 kafka 时,这个文件位于 /usr/local/etc/kafka/server.properties
如果你在 Docker 中运行 Kafka 添加这个标志 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
所以完整的命令看起来像:docker run -d --name kafka -p 9092:9092 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 --link zookeeper:zookeeper confluent/kafka
你只需要在 docker for mac 和 docker for windows 上使用host.docker.internal
而不是localhost
【参考方案2】:
变化:
#listeners=PLAINTEXT://:9092`
在 server.properties 中:
listeners=PLAINTEXT://localhost:9092
注意:您还需要取消注释此语句,也就是删除 # 符号。
【讨论】:
这在 macOS Catalina [版本 10.15.4 (19E287)] 上对我有用【参考方案3】:我发现了错误。 在服务器启动时观察 zookeeper 日志我注意到:
server.1=mylocal-0.:2888:3888
在主机名后加一个点 (.)。
生成 zookeeper 配置的脚本来自 https://github.com/kubernetes/contrib/blob/master/statefulsets/zookeeper/zkGenConfig.sh
往里面看,我发现 DOMAIN 没有被填满:
HOST=`hostname -s`
DOMAIN=`hostname -d`
function print_servers()
for (( i=1; i<=$ZK_REPLICAS; i++ ))
do
echo "server.$i=$NAME-$((i-1)).$DOMAIN:$ZK_SERVER_PORT:$ZK_ELECTION_PORT"
done
对于我的情况(本地主机)我不需要域,所以我删除了该变量。
现在 zookeeper 和 kafka 通信没有错误。
【讨论】:
【参考方案4】:如果您想将其设置为本地,则需要取消注释 path_to_kafka_folder\kafka_2.13-2.6.0\config\server.properties 中的以下行
listeners=PLAINTEXT://localhost:9092
【讨论】:
【参考方案5】:如果在运行后突然出现这种情况,你应该先尝试重启Kafka。
就我而言,重启解决了问题:
$docker-compose down && docker-compose up -d
【讨论】:
以上是关于Kafka + Zookeeper:无法建立到节点 -1 的连接。经纪人可能不可用的主要内容,如果未能解决你的问题,请参考以下文章
无法建立到节点 -1 的连接。经纪人可能不可用。 (org.apache.kafka.clients.NetworkClient)