csdn0811 2025-01-14 20:54 采纳率: 60.7%
浏览 10

列出当前 Kafka 集群中所有活跃的 Broker ID报错

在worker1使用docker容器部署的zookeeper,列出当前 Kafka 集群中所有活跃的 Broker ID报错,直接在系统部署的zookeeper则正常,问题出在哪里?难道容器和直接部署不能配合搭建kafka集群吗?

zookeeper容器的配置文件
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=false
admin.enableServer=true
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=192.168.205.135:2888:3888
server.3=192.168.205.134:2888:3888

[root@worker1 kafka_2.12-3.9.0]# docker ps
CONTAINER ID   IMAGE              COMMAND                   CREATED         STATUS              PORTS                                               NAMES
6cc09222023f   zookeeper:latest   "/docker-entrypoint.…"   6 minutes ago   Up About a minute   0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 0.0.0.0:2888->2888/tcp, :::2888->2888/tcp, 0.0.0.0:3888->3888/tcp, :::3888->3888/tcp, 8080/tcp   zookeeper

[root@worker1 kafka_2.12-3.9.0]# sh /root/list_kafka_brokerID.sh
Connecting to localhost:2181
[2025-01-14 20:46:05,348] WARN Session 0x0 for server localhost/127.0.0.1:2181, Closing socket connection. Attempting reconnect except it is a SessionExpiredException. (org.apache.zookeeper.ClientCnxn)
EndOfStreamException: Unable to read additional data from server sessionid 0x0, likely server has closed socket
    at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:77)
    at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350)
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1289)
KeeperErrorCode = ConnectionLoss for /brokers/ids
[2025-01-14 20:46:05,462] ERROR Exiting JVM with code 1 (org.apache.zookeeper.util.ServiceUtils)


[root@worker1 kafka_2.12-3.9.0]# jps
4609 QuorumPeerMain
6755 Jps
1019 Kafka

查看日志:docker logs 6c
2025-01-14 20:47:49,051 [myid:] - WARN  [NIOWorkerThread-4:o.a.z.s.NIOServerCnxn@393] - Close of session 0x0
java.io.IOException: ZooKeeperServer not running
    at org.apache.zookeeper.server.NIOServerCnxn.readLength(NIOServerCnxn.java:572)
    at org.apache.zookeeper.server.NIOServerCnxn.doIO(NIOServerCnxn.java:352)
    at org.apache.zookeeper.server.NIOServerCnxnFactory$IOWorkRequest.doWork(NIOServerCnxnFactory.java:508)
    at org.apache.zookeeper.server.WorkerService$ScheduledWorkRequest.run(WorkerService.java:153)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.base/java.lang.Thread.run(Unknown Source)

其中 worker2和worker3正常

[root@worker2 ~]# sh list_kafka_brokerID.sh
Connecting to localhost:2181

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[1, 2, 3]
  • 写回答

4条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的问题可能是由于Docker容器内的ZooKeeper与宿主机或其他Docker容器间的网络连接问题导致的。从错误信息来看,你的Kafka试图连接到localhost的ZooKeeper服务,但在Docker容器中,localhost代表的是容器自身,而不是宿主机或其他容器。因此,你可能需要正确配置Kafka以连接到正确的ZooKeeper实例。

    对于你的问题,我有以下几个建议:

    1. 确保你的ZooKeeper容器确实在运行,并且端口映射正确。你的docker ps输出显示ZooKeeper容器正在运行,并且端口已经映射到宿主机上。所以这部分看起来是没有问题的。
    2. 配置Kafka正确连接到ZooKeeper容器。在你的Kafka配置中,你应该使用Docker网络中的ZooKeeper容器的IP地址(或者是Docker自动分配的DNS名称,如果启用了Docker的DNS解析功能),而不是localhost。如果你使用的是Docker的默认桥接网络,你可以尝试使用docker.for.mac.localhostdocker.for.win.localhost来访问容器(如果你正在使用Docker Desktop for Mac或Windows)。或者你也可以通过Docker容器的名字来访问(假设你使用的是Docker的默认单宿主机模式)。例如:
    zookeeper.connect=zookeeper:2181
    

    这里的zookeeper是你的ZooKeeper容器的名字。

    1. 确保你的Kafka和ZooKeeper版本兼容。版本不匹配可能会导致连接问题。根据你提供的信息,你使用的是Kafka 3.9.0和ZooKeeper的latest版本,这应该是兼容的,但还是要确保你的实际部署环境与此一致。
    2. 如果以上步骤都无法解决问题,你可能需要检查你的网络策略和防火墙设置,确保Kafka可以访问ZooKeeper容器的网络。特别是在使用Docker Swarm或Kubernetes等容器编排工具时,网络配置可能会更复杂。

    希望这些建议能帮助你解决问题。如果问题仍然存在,请提供更多信息以便我能更准确地帮助你。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月14日