我想在Apache Kafka中运行多节点集群。 我制作了三个server.properties文件 - server,server1和server2。我还给了不同的经纪人ID和不同的端口号。仍在运行带有复制因子(如果为3)的脚本kafka-topics.sh时,它会抛出一个错误,指出复制因子:3大于代理数:0
我使用了这个命令:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replica-topic
显示的错误是
执行主题命令复制因子时出错:3大于 可用的代理:0 kafka.admin.AdminOperationException:复制 因素:比可用经纪人大3:0 kafka.admin.AdminUtils $ .assignReplicasToBrokers(AdminUtils.scala:70) 在kafka.admin.AdminUtils $ .createTopic(AdminUtils.scala:171)at at kafka.admin.TopicCommand $ .createTopic(TopicCommand.scala:93)at kafka.admin.TopicCommand $ .main(TopicCommand.scala:55)at kafka.admin.TopicCommand.main(TopicCommand.scala)
你能让我知道我哪里出错吗?
答案 0 :(得分:2)
我认为你应该至少启动3个kafka服务器,以确保代理的数量大于或等于复制因子的数量:
首先,我们为每个经纪人制作一个配置文件:
cp config / server.properties config / server-1.properties
cp config / server.properties config / server-2.properties
现在编辑这些新文件并设置以下属性:
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dir=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dir=/tmp/kafka-logs-2
broker.id属性是群集中每个节点的唯一且永久的名称。我们必须覆盖端口和日志目录,因为我们在同一台机器上运行所有这些并且我们希望让所有代理尝试在同一端口上注册或覆盖彼此的数据。 我们已经有Zookeeper和我们的单节点启动了,所以我们只需要启动两个新节点:
bin / kafka-server-start.sh config / server-1.properties
bin / kafka-server-start.sh config / server-2.properties
现在创建一个复制因子为3的新主题:
bin / kafka-topics.sh --create --zookeeper localhost:2181 --rerelication-factor 3 --partitions 1 --topic my-replicated-topic