【问题标题】:Getting NotLeaderForPartitionException for a very long time很长一段时间收到 NotLeaderForPartitionException
【发布时间】:2020-08-11 17:05:13
【问题描述】:

我有一个 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】:

    Produce 和 Fetch 请求都发送到分区的领导副本。 NotLeaderForPartitionException 当请求被发送到现在不是分区的领导副本的分区时抛出异常。

    客户端将每个分区的leader信息作为缓存进行维护。缓存管理的完整流程如下图所示。

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

    您可以浏览以下 Apache Kafka 文档。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2013-08-07
      • 1970-01-01
      • 2012-06-15
      相关资源
      最近更新 更多