接下去需要通过kafka传送数据,刚刚同事在cdh中新建的kafka,我想在里面创建topic。直接上手:

kafka-topics --zookeeper localhost:2181 --create -replication-factor 1 --partitions 3 --topic test

CDH中使用kafka指令跟kafka文档中说明的指令不一样,具体可以看这篇博文。    ——>   CDH 中 kafka 的使用注意

一、遇到第一个问题

结果报错了,具体错误信息如下:

Error while executing topic command : Replication factor: 1 larger than available brokers: 0.
[2019-11-27 20:48:18,659] ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 1 larger than available brokers: 0.
 (kafka.admin.TopicCommand$)

二、问题解决

问了度娘,有人遇到这个问题,需要看 CDH 中 kafka broker 的属性:zookeeper.chroot 这个属性与 kafka 创建 topic 后,信息存放的路径有关。然后我看了看同事配置的CDH中的 zookeeper.chroot 属性,原来是/kafka。如下图:

如果这里设置 zookeeper.chroot 为 /kafka。那么对应的,我们需要在/kafka 路径下创建topic。所以创建topic指令如下:

kafka-topics --zookeeper localhost:2181/kafka --create -replication-factor 1 --partitions 3 --topic test

我们只需在localhost:2181后加 /kafka 即可。

三、遇到的第二个问题

然后再次运行,执行后创建时topic是创建成功了,但是又报了一个异常:

[2019-11-27 20:52:44,290] WARN Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect (org.apache.zookeeper.ClientCnxn)
java.net.ConnectException: Connection refused
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
    at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350)
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)
Created topic test.

四、问题解决

这里我想了想还是查看一下 server.properties 配置文件。

这个配置文件在安装的 /opt/cloudera/parcels/KAFKA-4.1.0-1.4.1.0.p0.4/etc/kafka/conf.dist 目录下,具体看自己CDH安装kafka的路径。我的路径如下 :

打开看到我们的具体配置信息:

excuse me?  这里的 zookeeper.connect 竟然是 localhost:2181,难怪会出警告了。

修改成 zookeeper.connect=localhost:2181/kafka 保存。

然后我们再重新创建一个新的主题test1:

直接创建成功,不报错无异常。

 

 

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐