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

时间:2019-01-06 07:11:22

标签: apache-kafka apache-zookeeper

在集群中运行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上进行了以下设置:

OkHttpClient client

在每个节点的zookeeper.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

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

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

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

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

请问您到底是什么问题?那我的集群设置有什么问题?

谢谢。

2 个答案:

答案 0 :(得分:2)

我怀疑您是否能够成功地形成集群。在启动集群时,请确保首先启动所有三个Zookeeper节点,然后再启动三个代理。您可以参阅this帖子,检查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使用echo "1" > /opt/zookeeper/data/myid之类的bash cmd。其余的都差不多。

答案 1 :(得分:1)

可能发生此错误的唯一原因是,如果您的代理未连接到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所述。

相关问题