我有一个在 GCE 上使用 Kubernetes 的集群配置,我有一个用于 Zookeeper 的 Pod,还有一个用于 Kafka 的 Pod;它一直正常工作,直到 Zookeeper 崩溃并重新启动,并且它开始拒绝来自 kafka pod 的连接:
拒绝客户端的会话请求
正如所见/10.4.4.58:52260
zxid 0x1962630
完整的拒绝日志在这里:
2017-08-21 20:05:32,013 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /10.4.4.58:52260
2017-08-21 20:05:32,013 [myid:] - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@882] - Connection request from old client /10.4.4.58:52260; will be dropped if server is in r-o mode
2017-08-21 20:05:32,013 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@901] - Refusing session request for client /10.4.4.58:52260 as it has seen zxid 0x1962630 our last zxid is 0xab client must try another server
2017-08-21 20:05:32,013 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1008] - Closed socket connection for client /10.4.4.58:52260 (no session established for client)
因为 kafka 维护着一个 Zookeeper 会话,它会记住它看到的最后一个 zxid。所以当zookeeper服务宕机再回来的时候,zk的zxid会从一个较小的值开始。 ZKserver认为kafka看到了更大的zxid,所以拒绝它。
尝试重启kafka。
郑重声明,我遇到了这个问题,并且我所有的 kafka 都关闭了。
但是,我的卡夫卡经理仍然在听动物园管理员的讲话。关闭它解决了问题。
与@GuangshengZuo的回答相关......步骤
zookeeper-server-stop.bat
zookeeper-server-start.bat .\config\zookeeper.properties
这样就可以了我遇到了这个问题。我就是这样解决的。 首先我关闭了zookeeper和kafka 然后我开始了zookeeper,然后我开始了kafka。
这适用于 Centos 7。 它假设您位于 kafka 脚本所在 bin 目录的上方一级。 我使用了2个窗口,一个用于zookeeper进程,一个用于kafka进程。 这是一个实验,目的是看看什么有效,什么无效。 您可能想让事情在后台运行并将输出重定向到日志文件以在生产等中使用......
具体步骤:
1. shut down kafka and zookeeper
./bin/kafka-server-stop.sh ./bin/zookeeper-server-stop.sh
2. start zookeeper
./bin/zookeeper-server-start.sh ./config/zookeeper.properties
3. start kafka
./bin/kafka-server-start.sh ./config/server.properties