繁体   English   中英

错误:复制因子:比可用代理大1:当我创建Kafka主题时,它为0

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

在集群中运行Kafka时遇到一个问题。 我一一解释。 首先,当我从计算机在群集CSSH上运行Kafka命令时,出现以下错误:

执行主题命令时出错:复制因子:比可用代理大2个:1. [2019-01-06 15:12:36,587]错误org.apache.kafka.common.errors.InvalidReplicationFactorException:复制因子:比可用代理大2个:1.(kafka.admin.TopicCommand $)

实际上,在群集上运行Zookeeper和Kafka服务器之后,当我运行创建主题的命令时,我在计算机上运行CSSH以访问群集。 在集群中,我在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

请问问题出在什么地方? 我的集群设置有什么问题?

提前致谢。

我怀疑您是否能够成功地形成集群。 在启动集群时,请确保首先启动所有三个Zookeeper节点,然后再启动三个代理。 您可以参考这篇文章,检查Kafka是否已形成集群。

更新:我忽略了您正在使用的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经纪人? 您是将其作为服务还是守护进程运行? 您可以共享日志吗?

您可以通过运行以下命令来检查代理是否正在运行

数控-vz 150.20.11.137 9092

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

我建议您使用Zookeeper浏览器之类的Zookeeper WEB UI。 在docker上运行它是最简单的方法。 这是docker compose文件 这将帮助您确定Zookeeper是否存在任何问题,并且所有经纪人的确与之连接。

我还建议您使用Yahoo Kafka Manager。 它是群集的Web UI,也是管理群集的最优雅的方式。 这是码头工人

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM