生成消息时找不到主题:UNKNOWN_TOPIC_OR_PARTITION

sal*_*oua 10 consumer producer apache-kafka

我有一个双节点kafka集群(EC2实例),其中每个节点都用作一个单独的代理.当我使用以下命令在leader实例上运行生产者时:

kafka-console-producer.sh   --broker-list localhost:9092 --topic test
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

测试消息[2017-01-09 13:22:39,483] WARN在获取具有相关ID 0的元数据时出错:{test = UNKNOWN_TOPIC_OR_PARTITION}(org.apache.kafka.clients.NetworkClient)[2017-01-09 13:22: [39,562] WARN获取具有相关ID 1的元数据时出错:{test = UNKNOWN_TOPIC_OR_PARTITION}(org.apache.kafka.clients.NetworkClient)[2017-01-09 13:22:39,663] WARN获取具有相关ID为2的元数据时出错: {test = UNKNOWN_TOPIC_OR_PARTITION}(org.apache.kafka.clients.NetworkClient)...

列出主题并kaka-topics.sh显示主题存在的显示.

主题描述:

kafka-topics.sh --zookeeper localhost:2181 --describe --topic test
Run Code Online (Sandbox Code Playgroud)

回报

 Topic:test PartitionCount:8    ReplicationFactor:1 Configs:
     Topic: test    Partition: 0    Leader: 1   Replicas: 1 Isr: 1
     Topic: test    Partition: 1    Leader: 2   Replicas: 2 Isr: 2
     Topic: test    Partition: 2    Leader: 1   Replicas: 1 Isr: 1
     Topic: test    Partition: 3    Leader: 2   Replicas: 2 Isr: 2
     Topic: test    Partition: 4    Leader: 1   Replicas: 1 Isr: 1
     Topic: test    Partition: 5    Leader: 2   Replicas: 2 Isr: 2
     Topic: test    Partition: 6    Leader: 1   Replicas: 1 Isr: 1
     Topic: test    Partition: 7    Leader: 2   Replicas: 2 Isr: 2
Run Code Online (Sandbox Code Playgroud)

我正在使用kafka 0.10.1.1.

server.propertes 文件包含:

listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://0.0.0.0:9092
port=9092
host.name=kafka-node1(kafka-node1 for the second host)
advertised.host.name=kafka-node1(kafka-node2 for the second host)
advertised.port=9092
Run Code Online (Sandbox Code Playgroud)

当我尝试从第二个主机生成消息时,我收到以下消息:

WARN在主题分区test-4上获得错误产生响应且相关ID为1,重试(剩下2次尝试).错误:NOT_LEADER_FOR_PARTITION(org.apache.kafka.clients.producer.internals.Sender)....

有人可以帮忙吗?谢谢.

小智 -4

将主题的复制因子设置为 2 test,您将不会再遇到此异常。由于您有 2 个代理集群,因此执行以下命令来生成消息:

kafka-console-producer.sh   --broker-list localhost:9092,localhost:9093 --topic test
Run Code Online (Sandbox Code Playgroud)

这将向集群中的两个代理发送消息。

  • Kafka 生产者将每条消息发送到具有该特定主题的分区领导者的服务器。所以你最后一句话是不正确的。代理列表用于初始发现。 (4认同)
  • @CoryRobinson我不知道你的情况有什么问题,但问题似乎出在经纪人之间或经纪人与动物园管理员之间的通信中。检查所有zookeeper和kafka节点的日志,它会给你提示。 (2认同)