在Zookeeper 3.4.6中使用Kafka 0.8.1时运行到LeaderNotAvailableException
我按照他们的网站安装了稳定版本的kafka(0.8.1和2.9.2 Scala),并且正在运行一个3节点zookeeper合奏(3.4.6)。 我试图创build一个testing主题,但是看到没有领导者被分配到主题的分区:
[kafka_2.9.2-0.8.1]$ ./bin/kafka-topics.sh --zookeeper <zookeeper_ensemble> --describe --topic test-1 Topic:test-1 PartitionCount:1 ReplicationFactor:3 Configs: Topic: test-1 Partition: 0 **Leader: none** Replicas: 0,1,2 **Isr:**
我尝试使用控制台生产者编写主题,但遇到了LeaderNotAvailableExceptionexception:
[kafka_2.9.2-0.8.1]$ ./kafka-console-producer.sh --broker-list <broker_list> --topic test-1 hello world [2014-04-22 11:58:48,297] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo) [2014-04-22 11:58:48,321] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo) [2014-04-22 11:58:48,322] ERROR Failed to collate messages by topic, partition due to: Failed to fetch topic metadata for topic: test-1 (kafka.producer.async.DefaultEventHandler) [2014-04-22 11:58:48,445] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo) [2014-04-22 11:58:48,467] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo) [2014-04-22 11:58:48,467] ERROR Failed to collate messages by topic, partition due to: Failed to fetch topic metadata for topic: test-1 (kafka.producer.async.DefaultEventHandler) [2014-04-22 11:58:48,590] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo) [2014-04-22 11:58:48,612] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo) [2014-04-22 11:58:48,612] ERROR Failed to collate messages by topic, partition due to: Failed to fetch topic metadata for topic: test-1 (kafka.producer.async.DefaultEventHandler) [2014-04-22 11:58:48,731] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo) [2014-04-22 11:58:48,753] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo) [2014-04-22 11:58:48,754] ERROR Failed to collate messages by topic, partition due to: Failed to fetch topic metadata for topic: test-1 (kafka.producer.async.DefaultEventHandler) [2014-04-22 11:58:48,876] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo) [2014-04-22 11:58:48,877] ERROR Failed to send requests for topics test-1 with correlation ids in [0,8] (kafka.producer.async.DefaultEventHandler) [2014-04-22 11:58:48,878] ERROR Error in handling batch of 1 events (kafka.producer.async.ProducerSendThread) kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries. at kafka.producer.async.DefaultEventHandler.handle(DefaultEventHandler.scala:90) at kafka.producer.async.ProducerSendThread.tryToHandle(ProducerSendThread.scala:104) at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:87) at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:67) at scala.collection.immutable.Stream.foreach(Stream.scala:547) at kafka.producer.async.ProducerSendThread.processEvents(ProducerSendThread.scala:66) at kafka.producer.async.ProducerSendThread.run(ProducerSendThread.scala:44)
我也应该说,这是最初的工作了几天,然后突然创build的任何话题都有这个失踪的领导者问题。
Kafka使用外部协调框架(默认的Zookeeper)来维护configuration。 看来现在configuration与Kafka日志数据不同步。 在这种情况下,我会删除受影响的主题数据和相关的Zookeeper数据。
对于testing环境:
- 停止
Kafka-server
和Zookeeper-server
- 删除两个服务的数据目录,默认情况下它们是
/tmp/kafka-log
和/tmp/zookeeper
。 - 再次启动
Kafka-server
和Zookeeper-server
- 创build一个新的话题
现在您可以再次处理该主题。
对于生产环境:
由于Kafka主题存储在不同的目录中,因此应该删除特定的目录。 您还应该使用Zookeeper客户端从Zookeeper中删除/brokers/{broker_id}/topics/{broken_topic}
。
在做任何愚蠢的事情之前,请仔细阅读Kafka文档以确保configuration结构。 卡夫卡正在推出删除话题function( KAFKA-330 ),以便更容易地解决问题。
我遇到过同样的问题。 事实certificate,Kafka要求机器的主机名是可以解决的连接回自己。
我更新了我的机器上的主机名 ,重启zookeeper和kafka后,主题可以正确写入。
我已经通过向127.0.0.1
/etc/hosts
添加了一个条目来解决这个问题,它带有完全限定的主机名:
127.0.0.1 x4239433.your.domain.com x4239433
生产者和消费者开始正常工作。
我有同样的问题。 最后,我不得不删除停止卡夫卡节点,然后按照这里的build议如何删除卡夫卡主题 。 一旦我摆脱了这些破碎的话题,我就能够成功地开始卡夫卡了。
我想知道是否有更好的方法,以及如何避免将来发生这种情况。
我遇到了这个问题几次,终于明白为什么我遇到了这个问题。 我也要在这里添加调查结果。 我在Linux虚拟机,简单的答案是,自从我的虚拟机得到一个新的IP后,我有这个问题。 如果你看下configuration文件并打开server.properties,你会看到这一行
advertised.host.name = xx.xx.xx.xxx或localhost。
确保这个IP匹配你的当前IP,你可以在这里检查你的IP。
一旦我修好了,一切都开始正常工作。 我正在使用0.9.0.0版本。
我希望这可以帮助别人。
我有同样的问题,解决JDK从1.7到1.6
有同样的问题。 确保您的消费者/生产者正在使用的每个分区至less有一个主题。 如果没有使用该分区的主题,Zookeeper将找不到分区的领导者
这是JDK的问题。
我已经安装了openjdk
java version "1.7.0_51" OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.12.04.2) OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
但是我把它改成了oracle jdk(点击这个链接: http : //www.webupd8.org/2012/06/how-to-install-oracle-java-7-in-debian.html )
java version "1.7.0_80" Java(TM) SE Runtime Environment (build 1.7.0_80-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
现在它工作正常。 希望这可以帮助。
因此,还有一个可能的答案 – kafka config/server.properties
advertised.hostname
中的IP地址可能错误地input了额外的空间。
在我的情况下
advertised.host.name=10.123.123.211_\n (where _ is an extra space)
而不是正确的
advertised.host.name=10.123.123.211\n
出于某种原因,这是工作6个月没有问题,大概是一些图书馆更新删除了IP地址的轻松查找修剪多余的空间。
configuration文件的简单修复和kafka的重启解决了这个问题。
当我尝试在本地系统(Mac OS X El Capitan)中使用Kafka时,我遇到了完全相同的问题。 问题是我的动物园pipe理员,这不是指正确的configuration文件。 重新启动动物园pipe理员,然后重新启动Kafka并执行以下命令。 检查领导是不是没有。 如果Leader没有,请删除该主题并重新创build它。
kafka-topics --zookeeper localhost:2181 --describe --topic pytest
输出会像
Topic:pytest PartitionCount:1 ReplicationFactor:1 Configs: Topic: pytest Partition: 0 Leader: 0 Replicas: 0 Isr: 0
我希望这应该有所帮助。
我在Openshift的Kafka
, Zookeeper
pod中遇到了问题,Kafka被启用了TLS。 我不得不把下面的环境variables添加到Kafka,
-
KAFKA_ZOOKEEPER_CONNECT
-
KAFKA_SSL_KEYSTORE_LOCATION
-
KAFKA_SSL_TRUSTSTORE_LOCATION
-
KAFKA_SSL_KEYSTORE_PASSWORD
-
KAFKA_SSL_TRUSTSTORE_PASSWORD
-
KAFKA_ADVERTISED_LISTENERS
-
KAFKA_INTER_BROKER_LISTENER_NAME
-
KAFKA_LISTENERS
而设置variables后,我不得不删除并重新创build的豆荚,使其工作。