集群运行过程中,经常会发现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在生产环境下不太允许,还是需要找一找根本原因)
看着像用的kubernetes安装的kafka,zk与broker中断的时候,kafka的pod是新的还是老的。
是的,kafka和zookeeper都是以kubernetes中pod形式运行的。
zk与broker中断的时候,kafka pod看起来没有任何异常,也没有重启
先参考下,我翻译了一半,我已经投入测试了,目前很稳定,文章还没来得及翻译完:
zookeeper:https://www.orchome.com/1277
kafka:https://www.orchome.com/1813
你这个是只有第一次启动kafka集群的时候有这个问题?某个节点无法注册到zk上?
还是集群都正常了,使用中突然某个节点掉了?
初始注册不会有任何问题,主要是跑着跑着突然节点掉了,业务就出问题了。
先到丢失连接的broker上,找到引起失败的日志,确认是什么原因导致的节点不可用。
主机之间进行长ping试试啊,看看是否有瞬时的网络不通。
你的答案