我有一个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)
生产和提取请求均发送到分区的领导者副本。 NotLeaderForPartitionException
当请求发送到现在不是该分区的前导副本的分区时,将引发异常。
客户端将有关每个分区的领导者的信息保留为缓存。缓存管理的完整过程如下所示。
客户端需要通过在生产者配置中设置metadata.max.age.ms
来刷新此信息。该标签的默认值为300000 ms
您可以阅读以下Apache Kafka文档。