Error: Replication factor: 1 larger than available brokers: 0, when I create a Kafka topic

Error: Replication factor: 1 larger than available brokers: 0, when I create a Kafka topic

我在集群中 运行ning Kafka 遇到一个问题。我一一解释。 首先,当我从我的计算机 运行 Kafka 命令集群 CSSH 时,我得到这个错误:

Error while executing topic command : Replication factor: 2 larger than available brokers: 1. [2019-01-06 15:12:36,587] ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 2 larger than available brokers: 1. (kafka.admin.TopicCommand$)

其实我在我的电脑上运行CSSH访问集群,运行在集群上设置Zookeeper和Kafka服务器后,当我运行命令创建一个主题我得到错误。 在集群中,我在 node1 的 server.properties 上有这些设置:

broker.id=1
port=9092
listeners=PLAINTEXT://150.20.11.137:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
sockeet.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=10073741824
log.retention.check.interval.ms=300000
zookeeper.connect= 150.20.11.134:2186, 150.20.11.137:2186, 
150.20.11.157:2186
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

在每个节点的 zookeeper.properties 中我有这个设置:

 dataDir=/tmp/zookeeper
 clientPort=2186
 maxClientCnxns=0

此外,我 运行 集群节点上的每个命令到 运行 Kafka 和 Zookeeper:

./bin/zookeeper-server-start.sh ./config/zookeeper.properties
./bin/kafka-server-start.sh ./config/server.properties

之后,我想在集群中使用此命令创建一个主题,然后在每个节点上出现上述错误:

./bin/kafka-topics.sh --create --zookeeper localhost:2186 -- 
 replication-factor 2 --partitions 3 --topic testFlink

请问具体是什么问题?我的集群设置有什么问题?

提前致谢。

我怀疑您是否能够成功形成集群。在启动集群时,请确保首先启动所有 3 个 zookeeper 节点,然后是三个代理。可以参考post,查看Kafka是否已经形成集群

更新: 我忽略了您正在使用的 zookeeper 属性,它缺少创建集群所需的基本键值对。 zookeeper 的以下属性应该是很好的开始。考虑到您有 3 个 zookeeper 节点,zk 节点上的 zookeeper.propertieszoo.cfg(如果它是独立的 zk)文件应该如下所示。

zk-1 属性

tickTime=2000
initLimit=10
syncLimit=5
clientPort=2186
dataDir=/opt/zookeeper/data
server.1=0.0.0.0:2888:3888
server.2=<zk_2-ip>:2888:3888
server.3=<zk_3-ip>:2888:3888

zk-2 属性

tickTime=2000
initLimit=10
syncLimit=5
clientPort=2186
dataDir=/opt/zookeeper/data
server.1=<zk_1-ip>:2888:3888
server.2=0.0.0.0:2888:3888
server.3=<zk_3-ip>:2888:3888

zk-3 属性

tickTime=2000
initLimit=10
syncLimit=5
clientPort=2186
dataDir=/opt/zookeeper/data
server.1=<zk_1-ip>:2888:3888
server.2=<zk_2-ip>:2888:3888
server.3=0.0.0.0:2888:3888

好的,所以在启动 zookeeper 进程之前,您还需要做一件事。检查您正在使用的 dataDir 属性,在本例中为 /opt/zookeeper/data。对于每个动物园管理员,您必须创建一个名为 myid 的文件,并为 zk-1 输入值 1,为 zk-2 输入 2,为 zk-3 输入 3。然后你启动动物园管理员,它应该形成一个集群。您可以对 zk-1 使用 bash cmd,例如 echo "1" > /opt/zookeeper/data/myid。其余类似。

发生此错误的唯一原因是您的代理未连接到 zookeeper 集群。
你 运行 你的 Kafka 经纪人怎么样?你 运行 它是服务还是守护进程?可以分享日志吗?

您可以通过 运行 命令

来检查经纪人是否 运行

nc -vz 150.20.11.137 9092

如果代理不是 运行,这将失败。

我建议您使用 Zookeeper WEB UI,例如 Zookeeper Navigator。 运行 它放在 docker 上是最简单的方法。这是它的 docker compose file。这将帮助您确定 zookeeper 是否有任何问题以及所有代理是否确实连接到它。

我还建议您使用 yahoo Kafka manager。它是您集群的 Web UI,也是管理集群的最优雅方式。这是 docker

是的,您的 zookeeper 属性需要包括所有其他 zookeeper 节点的服务器 IP,如 Bitswazsky 所述。