错误:复制因子:1大于可用代理:0,当我创建kafka主题时

cuxqih21  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(335)

我在集群中运行Kafka有一个问题。我一一解释。首先,当我从我的计算机在集群cssh上运行kafka命令时,出现以下错误:
执行topic命令时出错:复制因子:2大于可用代理:1[2019-01-06 15:12:36587]error org.apache.kafka.common.errors.invalidreplicationfactorexception:复制因子:2大于可用代理:1(kafka.admin.topiccommand$)
实际上,我在我的计算机上运行cssh来访问集群,在集群上运行zookeeper和kafka服务器之后,当我运行创建主题的命令时,我得到了错误。在集群中,我在节点1的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

你能告诉我到底是什么问题吗?我的集群设置有什么问题?
提前谢谢。

2vuwiymt

2vuwiymt1#

发生此错误的唯一原因是代理未连接到zookeeper群集。
你是怎么管理你的Kafka经纪人的?您是作为服务运行还是作为守护进程运行?你能分享日志吗?
您可以通过运行命令来检查代理是否正在运行
常闭-vz 150.20.11.137 9092
如果代理没有运行,这将失败。
我建议您使用zookeeper web ui,如zookeeper navigator。在docker上运行它是最简单的方法。这是docker为它编写的文件。这将帮助您确定zookeeper是否有任何问题,以及所有代理是否确实与之相关。
我还建议你使用雅虎Kafka经理。它是集群的webui,也是管理集群的最优雅的方式。这是 Docker 。
是的,zookeeper属性需要包括所有其他zookeeper节点的服务器ip,如bitswazsky所解释的。

uxh89sit

uxh89sit2#

我怀疑你是否能成功地组成一个集群。在启动集群时,请确保首先启动所有3个zookeeper节点,然后启动3个代理。你可以参考这篇文章,看看Kafka是否已经形成了一个集群。
更新:我忽略了您正在使用的zookeeper属性,它缺少创建集群所需的基本键值对。zookeeper的以下属性应该是很好的开始。考虑到您有3个zookeeper节点 zookeeper.properties 或者 zoo.cfg (如果是独立的zk)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程序之前,你还需要做一件事。 checkout dataDir 属性,在本例中 /opt/zookeeper/data . 对于每个Zookeeper,您必须创建一个名为 myid 输入zk-1为1,zk-2为2,zk-3为3。然后你启动Zookeeper,它会形成一个集群。你可以使用bash命令,比如 echo "1" > /opt/zookeeper/data/myid 对于zk-1。其他的也差不多。

相关问题