Kafka:此服务器不是该主题分区的领导者

时间:2018-10-25 11:47:03

标签: java apache-kafka kafka-producer-api

可能是Kafka - This server is not the leader for that topic-partition的副本,但没有公认的答案,也没有明确的解决方案。

我有一个简单的Java程序来向Kafka生成消息:

select User,
       max(Value) as "Maximum Value",
       min(Value) as "Minimum Value"
from AliceDataset
group by User
having max(Value) > 3

我遇到以下异常:

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-console-producer

描述主题时,我会获得以下信息:

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.

我尝试创建一个新主题并生成Quick start guide中提到的消息,然后上述步骤可以正常工作。

我应该在Topic:My_Topic PartitionCount:1 ReplicationFactor:1 Configs: Topic: My_Topic Partition: 0 Leader: 0 Replicas: 0 Isr: 0 或生产者配置中进行哪些更正,以便我可以在此主题中成功发布消息?

1 个答案:

答案 0 :(得分:0)

如果“控制台客户端正常运行,但Java程序不正常” ,则“更改重试限制”的解决方案可能会有所帮助。

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

(例如:主题已删除,并以相同的名称重新创建,但具有不同的分区数)。

删除Zookeeper和Kafka的旧日志文件并再次创建主题,或使用其他名称创建主题将解决此问题。