Zookeeper 拒绝来自旧客户端的 Kafka 连接

Zookeeper refuses Kafka connection from an old client

我有一个在 GCE 上使用 Kubernetes 的集群配置,我有一个用于 zookeeper 的 pod 和另一个用于 Kafka 的 pod;它一直正常工作,直到 Zookeeper 崩溃并重新启动,并且它开始拒绝来自 kafka pod 的连接:

Refusing session request for client /10.4.4.58:52260 as it has seen 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 都关闭了。
但是,我的 kafka-manager 仍然在听动物园管理员的消息。关闭它解决了问题。

相关@GuangshengZuo 的回答....步骤

  1. 停止任何残留的 zookeeper 实例 - zookeeper-server-stop.bat
  2. 开始新的动物园管理员- zookeeper-server-start.bat .\config\zookeeper.properties 这样就可以了