[关闭]
@xtccc 2016-01-06T14:22:16.000000Z 字数 850 阅读 2711

Q&A

给我写信
GitHub

此处输入图片的描述
Kafka


No available brokers


Kafka的5个brokers正常启动,但是在创建topic时,Kafka认为当前没有可用的brokers,如下:

QQ20160104-2@2x.png-132.1kB



Kafka是怎样探测当前可用的brokers?

Kafka的配置项 zookeeper.chroot 指定了Kafka集群在ZK中使用的root znode,所有与该Kafka集群相关的ZK数据都会保存在该root znode下。Kafka客户端会根据命令中的 --zookeeper参数来查看当前可用的brokers。例如,如果这个参数为“{zk_quorum}/kafka”,那么可以看到这个目录下有这些数据:

QQ20160104-3@2x.png-59.5kB



为什么会找不到可用brokers?

再看创建topic的命令,其中关于ZK的参数ZK_QUORUN,我们为它设置的实际值是 ecs2:2181,ecs3:2181,ecs4:2181,这样会导致ZK client在使用ZK的相关数据时,使用的root znode是根目录,而不是Kafka参数zookeeper.chroot

由于这个集群之安装过Kafka,那时设置的Kafka root znode就是根目录,所以在root znode下也会有目录/brokers/ids,但是这个znode是空的,因此找不到可用的brokers。


为Kafka client指定正确的ZK root znode

我们将创建topic的命令中的参数--zookeeper改为{ZK_QUORUM}/{chroot}即可。例如,我们的Kafak集群的实际zookeeper.chroot值为kafka,那么,参数--zookeeper的值如下:

QQ20160104-4@2x.png-56.4kB

实际上,Kafka broker的启动命令的配置文件中,也是这么类似设置root znode的。例如,我们实际集群中Kafka启动的配置文件中(/var/run/cloudera-scm-agent/process/3779-kafka-KAFKA_BROKER/kafka.properties)有一项设置为:

QQ20160104-5@2x.png-17.3kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注