长时间获取NotLeaderForPartitionException

问题描述 投票:0回答:1

我有一个3节点的kafka群集,群集中的一个节点突然关闭,并且在向其中一个主题发送消息时,我开始在我的应用程序日志中看到NotLeaderForPartitionException异常,但是对于某些主题我能够发布和使用消息。

我可以看到这个问题一直持续到重新启动所有kafka服务器为止,重新启动之后一切正常。

现在,我的问题是:为什么不为这些主题选出新的领导人而不是继续抛出相同的NotLeaderForPartitionException例外,以及如何针对这些主题进行新的领导人选?

异常跟踪:

2020-04-11 22:05:21,747 ERROR [pool-15-thread-297] [KafkaMessageProducer:92] Message send failed:
java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.NotLeaderForPartitionException: This server is not the leader for that topic-partition.
    at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.valueOrError(FutureRecordMetadata.java:94)
    at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.get(FutureRecordMetadata.java:64)
    at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.get(FutureRecordMetadata.java:29)
java apache-kafka
1个回答
0
投票

生产和提取请求均发送到分区的领导者副本。 NotLeaderForPartitionException当请求发送到现在不是该分区的前导副本的分区时,将引发异常。

客户端将有关每个分区的领导者的信息保留为缓存。缓存管理的完整过程如下所示。

enter image description here

客户端需要通过在生产者配置中设置metadata.max.age.ms来刷新此信息。该标签的默认值为300000 ms

您可以阅读以下Apache Kafka文档。

https://kafka.apache.org/documentation/

© www.soinside.com 2019 - 2024. All rights reserved.