我有一个3节点Kafka群集,使用图像 wurstmeister / kafka:0.10.1.1 在 Kubernetes 之上运行。
Zookeeper群集由3个节点组成,版本为 3.4.8 。
我注意到ID为2的Kafka经纪人无休止地打印消息:
[2017-05-08 13:51:16,748]错误[ReplicaFetcherThread-0-0],分区[partition_name,5]到代理0的错误:org.apache.kafka.common.errors.NotLeaderForPartitionException:此服务器不是该主题分区的领导者。 (kafka.server.ReplicaFetcherThread)
每秒都会为很多分区打印此消息。经纪人2日志达到10GB以上。
查看Zookeeper,我可以看到代理2未列在znode / brokers / ids 中。
每个动物园管理员和卡夫卡节点都有其自己的K8S的部署和服务(如ZK-服务-1 - > ZK-部署-1,ZK-服务-2- - > zk-deployment-2 ...)。 Zookeeper节点通过k8s服务名称相互了解。例如,在文件属性中,服务器1具有以下行: server.1 = zk-service-1:2888:3888 。
Kafka也是如此:代理X具有 advertised.host.name 属性= kafka-X,其中kafka-X是与该代理的pod关联的服务名称。 经纪人 zookeeper.connect 属性是zk-service-1,zk-service-2,zk-service-3。
我将pod的主机名设置为附加到它的服务名称。
我不知道如何正确调试它,哪些信息可以帮助我理解这个问题。你有任何线索吗?
答案 0 :(得分:0)
我看到的方式是,您正在寻找您的节点具有一致的主机名。
我很确定如果使用名为statefulset
的控制器部署zookeeper,则可以解决具有一致主机名的问题。你不必完成命名pod的所有操作。
deployment
创建了广告连播,但广告连播的名称不相同,但statefulset
创建了具有一致名称的广告连播,并通过无头服务公开。所以基本上你直接和豆荚说话。
详细了解statefulsets
here和basics here。
或者,对于配置,您可以通过以下zookeeper配置和kafka配置获取帮助。
可以找到以上配置here。