当前位置: 首页 > 知识库问答 >
问题:

kafka:这个服务器不是主题分区的领导者

闾丘玮
2023-03-14

可能是Kafka的复制品——该服务器不是该主题分区的领导者,但没有公认的答案,也没有明确的解决方案。

我有一个简单的java程序来向Kafka传达信息:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("retries", 1);
props.put("batch.size", 16384);
props.put("linger.ms", 100);
props.put("buffer.memory", 33554432);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "com.company.project.KafkaValueSerializer");
MyMessage message = new MyMessage();
Producer<String, MyMessage> producer = new KafkaProducer<>(props);
Future<RecordMetadata> future =
    producer.send(new ProducerRecord<String, MyMessage>("My_Topic", "", message));

我得到了以下例外:

Exception in thread "main" 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)
    at 
Caused by: org.apache.kafka.common.errors.NotLeaderForPartitionException: This server is not the leader for that topic-partition.

当我尝试使用kafka控制台生产者时,我得到以下错误:

D:\kafka_2.11-0.10.2.0\bin\windows>kafka-console-producer.bat --broker-list localhost:9092  --topic My_Topic
hello
[2018-10-25 17:05:27,225] WARN Got error produce response with correlation id 3 on topic-partition My_Topic-0, retrying (2 attempts left). Error: NOT_LEADER_FOR_PARTITION (org.apache.kafka.clients.producer.internals.Sender)
[2018-10-25 17:05:27,335] WARN Got error produce response with correlation id 5 on topic-partition My_Topic-0, retrying (1 attempts left). Error: NOT_LEADER_FOR_PARTITION (org.apache.kafka.clients.producer.internals.Sender)
[2018-10-25 17:05:27,444] WARN Got error produce response with correlation id 7 on topic-partition My_Topic-0, retrying (0 attempts left). Error: NOT_LEADER_FOR_PARTITION (org.apache.kafka.clients.producer.internals.Sender)
[2018-10-25 17:05:27,544] ERROR Error when sending message to topic My_Topic with key: null, value: 5 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.NotLeaderForPartitionException: This server is not the leader for that topic-partition.

当我描述我的主题时,我有以下信息:

Topic:My_Topic        PartitionCount:1        ReplicationFactor:1     Configs:
        Topic: My_Topic       Partition: 0    Leader: 0 Replicas: 0     Isr: 0

我试着创建一个新的主题,并按照《快速入门指南》中提到的那样生成消息,然后上述步骤都很有效。

我应该在My_Topic或producer configuration(生产者配置)中进行哪些更正,以便在此主题中成功发布消息?

共有1个答案

濮阳振海
2023-03-14

如果是“控制台客户端工作,但Java程序不工作”,那么“更改重试限制”的解决方案可能会有所帮助。

由于Java程序和内置命令行生成器都无法连接到Kafka,我怀疑问题可能是由于过时的配置造成的。

(例如:删除主题并使用相同的名称重新创建,但分区计数不同)。

删除zookeeper和Kafka的旧日志文件,然后再次创建主题,或者使用其他名称创建主题,都可以解决问题。

 类似资料:
  • 我们从每个kafka机器的中得到了许多错误(集群中有kafka) 根据我的理解,每个主题都由一个或多个经纪人服务--一个是领导者,其余的经纪人是追随者。

  • Kafka主题分区偏移位置始终从0或随机值开始,如何确保使用者记录是分区中的第一条记录?有没有办法找出答案?如果有的话,请让我知道。谢谢。

  • 简单问题: 假设我有一个具有3个分区的主题:Topic:StateEvents P1、P2和P3。 让我们假设生产者生成20条消息: 1, 2, 3, ..........20 我的问题是: 当制作人生成这些消息时: 1)每个消息将只在且仅在1个分区?也就是说,1在P1,2在P2,3在P3,然后4在P1,5在P2,6在P3,以此类推? 2)如果#1为真,当消费者订阅时,它将订阅所有分区,以便获得所

  • 我正在努力通过SSL移动所有Kafka流量。每个区域有两个集群。 使用Kafka 2.7.0版。 除一个集群外,所有区域和所有集群都可以通过SSL正常工作。 在其他工具中,我使用< code>kafkacat来探测集群。 当通过明文连接对此集群执行时,它会列出所有代理、主题和分区,并显示每个分区的领导者: 当通过 SSL 执行相同的命令时,会发现: 0经纪人 列出主题和分区,但没有标题 对该地区的

  • 我使用的是spring-kafka 2.1.10.release。我有一个拥有next属性的消费者(复制了几乎所有的属性): 我生产的Apache Kafka版本是2.11-1.0.0-0pan4。有一个集群内部有3个kafka的节点: 甚至无法在本地复制。事情是这样的: 4)最神秘:在应用程序中,一切都可以工作。Spring-consumer读取新消息并将它们发送给kafka。我看到了这样的日志

  • 我开始学习Kafka用于企业解决方案。 在我阅读的过程中,我脑海中浮现出一些问题: > 当一个生产者正在生成一个消息--它会指定它想要将消息发送到的主题,是这样吗?它关心分区吗? 当订阅服务器运行时-它是否指定其组id,以便它可以是同一主题的使用者集群的一部分,或者是该组使用者感兴趣的几个主题的一部分? 每个消费者组在代理上有一个对应的分区还是每个消费者都有一个? 分区是由代理创建的,因此不是消费