【问题标题】:Kafka - This server is not the leader for that topic-partitionKafka - 此服务器不是该主题分区的领导者
【发布时间】:2018-05-25 19:36:10
【问题描述】:

我有两个代理 kafka 0.10.2.0 集群。复制因子为 2。我正在针对这个 Kafka 运行 1.0.0 kafka 流应用程序。在我的 kafka 流应用程序中,生产者配置有 retries = 10 and retry.backoff.ms = 100

运行几分钟后,我在 Kakfa server.log 中观察到以下日志。由于这个 Kafka 流应用程序正在抛出“NOT_LEADER_FOR_PARTITION”异常。

可能的原因是什么?请帮帮我。

[2017-12-12 10:26:02,583] ERROR [ReplicaFetcherThread-0-1], Error for partition [__consumer_offsets,22] to broker 1:org.apache.kafka.common.errors.NotLeaderForPartitionException: This server is not the leader for that topic-partition. (kafka.server.ReplicaFetcherThread)

【问题讨论】:

  • Producer 确实在内部重试了这个错误,并且只抛出它退休已用尽——也许你有网络问题,因此生产者找不到正确的代理。
  • 你能解决这个问题吗?

标签: apache-kafka apache-kafka-streams


【解决方案1】:

每个主题由一个或多个代理提供服务 - 一个是领导者,其余代理是追随者。

生产者需要向领导者代理发送新消息,领导者代理在内部将数据复制到所有追随者。

我假设,您的生产者客户端没有连接到正确的代理,它连接到跟随者而不是领导者,并且该跟随者拒绝了您的发送请求。

尝试运行./kafka-topics.sh --zookeeper localhost:2181 --topic your_topic --describe

Topic:your_topic    PartitionCount:3    ReplicationFactor:1 Configs:retention.ms=14400000
Topic: your_topic   Partition: 0    Leader: 2   Replicas: 2 Isr: 2
Topic: your_topic   Partition: 1    Leader: 0   Replicas: 0 Isr: 0
Topic: your_topic   Partition: 2    Leader: 1   Replicas: 1 Isr: 1

在此示例中,您可以看到 your_topic 有 3 个分区,这意味着所有 3 个代理都是该主题的领导者,每个都在不同的分区上,st broker 2partition 0 的领导者,broker 0broker 1 是关注者在partition 0

【讨论】:

  • 感谢您的解释。但是我该如何解决这个问题NOT_LEADER_FOR_PARTITION?我应该在生产者中纠正什么?
  • 如果我理解正确的话,重试 > 0 生产者应该能够在随后的重试中找到正确的领导者。
  • ubuntu@ip-172-21-0-219:/opt/kafka/kafka_2.11-0.10.0.0$ bin/kafka-topics.sh --describe --zookeeper localhost:2181 - -topic gameServicPlayerProfile 线程“主”org.I0Itec.zkclient.exception.ZkTimeoutException 异常:无法在超时内连接到动物园管理员服务器:org.I0Itec.zkclient.ZkClient.connect(ZkClient.java:1232) 在 org.I0Itec 的 30000 .zkclient.ZkClient.(ZkClient.java:156) at org.I0Itec.zkclient.ZkClient.(ZkClient.java:130)
  • 在 kafka.utils.ZkUtils$.createZkClientAndConnection(ZkUtils.scala:75) 在 kafka.utils.ZkUtils$.apply(ZkUtils.scala:57) 在 kafka.admin.TopicCommand$.main( TopicCommand.scala:54) 在 kafka.admin.TopicCommand.main(TopicCommand.scala)
  • 我收到此错误我应该采取什么措施
【解决方案2】:

尝试设置这些属性,看看是否有助于解决问题:

props.put(ProducerConfig.RETRIES_CONFIG, 10);  //increase to 10 from default of 0
props.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG,   
    Integer.toString(Integer.MAX_VALUE)); // increase to infinity from default of 300 s

(Source)

【讨论】:

  • 消费者财产与这个问题有什么关系?
猜你喜欢
  • 2023-04-05
  • 2020-03-30
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
相关资源
最近更新 更多