我在集群中运行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
你能告诉我到底是什么问题吗?我的集群设置有什么问题?
提前谢谢。
2条答案
按热度按时间2vuwiymt1#
发生此错误的唯一原因是代理未连接到zookeeper群集。
你是怎么管理你的Kafka经纪人的?您是作为服务运行还是作为守护进程运行?你能分享日志吗?
您可以通过运行命令来检查代理是否正在运行
常闭-vz 150.20.11.137 9092
如果代理没有运行,这将失败。
我建议您使用zookeeper web ui,如zookeeper navigator。在docker上运行它是最简单的方法。这是docker为它编写的文件。这将帮助您确定zookeeper是否有任何问题,以及所有代理是否确实与之相关。
我还建议你使用雅虎Kafka经理。它是集群的webui,也是管理集群的最优雅的方式。这是 Docker 。
是的,zookeeper属性需要包括所有其他zookeeper节点的服务器ip,如bitswazsky所解释的。
uxh89sit2#
我怀疑你是否能成功地组成一个集群。在启动集群时,请确保首先启动所有3个zookeeper节点,然后启动3个代理。你可以参考这篇文章,看看Kafka是否已经形成了一个集群。
更新:我忽略了您正在使用的zookeeper属性,它缺少创建集群所需的基本键值对。zookeeper的以下属性应该是很好的开始。考虑到您有3个zookeeper节点
zookeeper.properties
或者zoo.cfg
(如果是独立的zk)zk节点上的文件应该如下所示。zk-1性质
zk-2性质
zk-3性质
好吧,在你开始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。其他的也差不多。