在使用kafka 和zookeeper 由于实时分析程序的实现,zookeeper导入部署版本和分析程序jar包的版本不一致,导致远程服务器连接实时分析程序kafka集群的zookeeper错误信息如下:
2012-12-31 10:51:41,562-[TS] INFO main-EventThread org.I0Itec.zkclient.ZkClient - zookeeper state changed (Disconnected)
2012-12-31 10:51:43,008-[TS] INFO main-SendThread(17.22.17.1:2181) org.apache.zookeeper.ClientCnxn - Opening socket connection to server /17.22.17.1:2181. Will not attempt to authenticate using SASL (unknown error)
2012-12-31 10:51:43,009-[TS] INFO main-SendThread(17.22.17.1:2181) org.apache.zookeeper.ClientCnxn - Socket connection established to /17.22.17.1:2181, initiating session
2012-12-31 10:51:43,011-[TS] WARN main-SendThread(17.22.17.1:2181) org.apache.zookeeper.ClientCnxnSocket - Connected to an old server; r-o mode will be unavailable
2012-12-31 10:51:43,011-[TS] INFO main-SendThread(17.22.17.1:2181) org.apache.zookeeper.ClientCnxn - Session establishment complete on server /17.22.17.1:2181, sessionid = 0x13b8a23254100be, negotiated timeout = 6000
2012-12-31 10:51:43,012-[TS] INFO main-EventThread org.I0Itec.zkclient.ZkClient - zookeeper state changed (SyncConnected)
2012-12-31 10:51:47,012-[TS] INFO main-SendThread(17.22.17.1:2181) org.apache.zookeeper.ClientCnxn - Client session timed out, have not heard from server in 4002ms for sessionid 0x13b8a23254100be, closing socket connection and attempting reconnect
另一种现象是实时分析程序不断抛出上述错误。
我们可以从错误的日志中找到它,zookeeper的客户端 可以建立和zookeeper server但是在等待zookeeper server 返回数据超时。正是这些日志让我们误入歧途。我们一致认为网络的某个地方有问题(因为机房的网络结构比较复杂,分析程序和kafka在试图解决这个问题的过程中,我们总是纠结于交换机和防火墙的直接存在。
直到我们计划放弃,我们准备实时分析程序和kafka在同一台服务器上部署,小组中的另一位同事提醒我检查是否有zookeeper版本问题。我比较了分析程序和kafka zookeeper 发现两者的版本确实不一致,在程序中使用 zookeeper.3.4.4,而kafka的zookeeper 是 3.3.4。我正在更新分析程序zookeeper运行测试程序后,连接成功,分析程序运行正常。
好了,到了这里,问题终于解决了,但我很想吐槽的是:版本不一致,报错信息要人性化!