java - Kafka:此服务器不是该主题分区的领导者
问题描述
可能与 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-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.
当我描述我的主题时,我有以下信息:
Topic:My_Topic PartitionCount:1 ReplicationFactor:1 Configs:
Topic: My_Topic Partition: 0 Leader: 0 Replicas: 0 Isr: 0
我尝试按照快速入门指南中的说明创建一个新主题并生成消息,然后上述步骤运行良好。
我应该在My_Topic
生产者配置或生产者配置中进行哪些更正,以便我可以在此主题中成功发布消息?
解决方案
如果是“控制台客户端工作,但 Java 程序不工作”的情况,那么“更改重试限制”的解决方案可能会有所帮助。
由于 Java 程序和内置的命令行生产者都无法连接到 Kafka,我怀疑问题可能是由于配置过时造成的。
(例如:主题被删除并再次创建,名称相同,但分区数不同)。
删除 zookeeper 和 Kafka 的旧日志文件并重新创建主题,或者创建一个不同名称的主题将解决问题。
推荐阅读
- javascript - 固定标题和锚链接:如何减少可点击区域?
- rundeck - 通过 Ansible 管理 Rundeck
- python-3.x - 如何将 SlidesSnippet 工具用于 google slides api python
- ios - Flutter iOS 应用提交问题警告:缺少推送通知权利
- java - Maven clean install COMPILATION ERROR cannot access jar, zip END header not found
- r - 使用 `deparse(substitute))`(或替代方法)时如何处理空格?
- excel - 将带有条件 IF 的 groupby 元素/列表导出到 Excel 工作表
- sql - 选择 n 天前的日期,不包括周末
- sparql - SPARQL - 从相关变量的结果中排除一个变量
- r - Ubuntu 14.04 配置:错误:“找不到 libxml”