集群运行过程中,经常会发现kafka注册zookeeper失败,即zookeeper中/brokers/ids发现少了某个kafka broker:
# kubectl exec zookeeper-0 -- zkCli.sh ls /brokers/ids | tail -1
[0, 2]
曾经发现过的问题是,kafka和zookeeper的连接参数ZOOKEEPER_CONN
采用了zookeeper的service地址,连接时可能随机连接某个zookeeper pod,导致连接无法保持,所以当前已经改为:
zookeeper-0.zookeeper-hs.default.svc.cluster.local:2181,zookeeper-1.zookeeper-hs.default.svc.cluster.local:2181,zookeeper-2.zookeeper-hs.default.svc.cluster.local:2181
但仍旧会发生连接断开的问题。当前kafka和zookeeper相关参数如下:
zookeeper:
tickTime=2000
initLimit=5
syncLimit=15
maxClientCnxns=500
autopurge.purgeInterval=24
autopurge.snapRetainCount=6
kafka:
zookeeper.session.timeout.ms=20000
不知大家有没有遇到过相关问题?
(有一种规避方案是通过kakfa探针检测是否注册到zookeeper,但总是重启kafka broker在生产环境下不太允许,还是需要找一找根本原因)