首页 文章

ReplicaFetcherThread的Kafka Endless NotLeaderForPartitionException

提问于
浏览
0

我有一个3节点Kafka集群,使用图像 wurstmeister/kafka:0.10.1.1Kubernetes 上运行 .

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 中 .

每个Zookeeper和Kafka节点都有自己的k8s DeploymentService (如zk-service-1 - > zk-deployment-1,zk-service-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的主机名设置为附加到它的服务名称 .

我不知道如何正确调试它,哪些信息可以帮助我理解这个问题是什么 . 你有任何线索吗?

1 回答

  • 0

    我看到它的方式是您正在寻找您的节点具有一致的主机名 .

    我很确定如果使用名为 statefulset 的控制器部署zookeeper,则解决了具有一致主机名的问题 . 您不必完成命名pod的所有操作 .

    deployment 创建了pod但是pod的名称不相同,但 statefulset 创建了具有一致名称的pod,并通过无头服务公开它 . 所以基本上你直接和 beans 荚说话 .

    了解更多关于 statefulsets herebasics here的信息 .

    或者,对于配置,您可以从以下zookeeper配置和kafka配置中获得帮助 .

    上面的配置可以找到here .

相关问题