【问题标题】:Error creating Kafka Topics- Replication factor larger than available brokers创建 Kafka 主题时出错 - 复制因子大于可用代理
【发布时间】:2016-01-10 22:47:54
【问题描述】:

我正在尝试通过命令行按照 Apache Kafka 网站上的指南在 Kafka 中创建主题。 运行命令时:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

我得到如下错误:

Error while executing topic command replication factor: 1 larger than available
brokers: 0
kafka.admin.AdminOperationException: replication factor: 1 larger than available
 brokers: 0
        at kafka.admin.AdminUtils$.assignReplicasToBrokers(AdminUtils.scala:70)
        at kafka.admin.AdminUtils$.createTopic(AdminUtils.scala:171)
        at kafka.admin.TopicCommand$.createTopic(TopicCommand.scala:93)
        at kafka.admin.TopicCommand$.main(TopicCommand.scala:55)
        at kafka.admin.TopicCommand.main(TopicCommand.scala)

[2015-10-13 14:25:38,607] INFO Processed session termination for sessionid: 0x15
06056566d0004 (org.apache.zookeeper.server.PrepRequestProcessor)
[2015-10-13 14:25:38,608] INFO Closed socket connection for client /127.0.0.1:33
391 which had sessionid 0x1506056566d0004 (org.apache.zookeeper.server.NIOServer
Cnxn)

我该如何解决这个问题?有什么好的文档可以开始使用吗? 谢谢!!

【问题讨论】:

  • 它清楚地表示 0 个代理可用。通过启动代理
  • 我遇到了同样的问题,错过了在 zookeeper 之后必须启动 kafka 服务器的部分。

标签: apache-kafka


【解决方案1】:

确保您的 config/server.properties 文件的 listenersadvertised.listeners 属性具有有效(且未注释)值。 p>

【讨论】:

    【解决方案2】:

    问题是因为 data/kafkalogs 和 data/zookeeperlogs 文件夹中的日志。

    1. 保持这些文件夹不变,只需删除其中的日志即可。
    2. 杀死之前的进程,重新开始
    3. 启动 Zookeeper
    4. 启动 Kafka - 等待它是否重新启动或抛出任何错误。
    5. 创建一个主题(如果 zookeeper 和 kafka cli 都没有抛出错误,这应该可以工作)

    【讨论】:

      【解决方案3】:

      HDFS/namenode 恰好处于安全模式

      hdfs dfsadmin -safemode 获取 hdfs dfsadmin -safemode 离开

      1 - 启动 zookeeper

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

      你可以在其他终端验证

      远程登录本地主机 2181 //尝试 127.0.0.1...
      已连接到本地主机。
      转义字符是 '^]'。
      统计数据

      2 - 启动 kafka 代理/服务器

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

      现在创建主题

      kafka-topics.sh --create --topic t1 --zookeeper localhost:2181 --replication-factor 1 --partitions 1

      kafka-topics.sh --list --zookeeper localhost:2181

      【讨论】:

        【解决方案4】:

        删除在以下目录中创建的日志和消费者偏移文件夹。

        C:\Kafka\kafka_2.12-2.5.0\data\zookeeper

        PS:你可能会丢失之前所有的主题细节。

        【讨论】:

          【解决方案5】:

          对于那些确定代理已启动并运行的用户,请检查您的 server.properties 配置。

          在我的例子中,kafka 的 znodes 是/kafka,如下所示。

          zookeeper.connect=zk1.beta:2181,zk2.beta:2181,zk3.beta:2181/kafka
          

          所以,在创建主题时尝试以下命令:

          bin/kafka-topics.sh --create --zookeeper zk1.beta:2181/kafka --replication-factor 2 --partitions 2 --topic test2
          

          【讨论】:

            【解决方案6】:
            • 检查是否所有代理都注册到 Zookeeper:

              zookeeper-shell.sh localhost:2181 ls /brokers/ids

            • 很可能括号中缺少某些 ID []

            • 登录该ID所在的机器,重启broker:

              kafka-server-stop.sh
              nohup kafka-server-start.sh ../config/server.properties > /dev/null 2>&1 &
              
            • 再次检查 Zookeeper 现在是否可以正确查看所有代理。
            • 重试创建主题命令。

            希望对你有帮助。

            【讨论】:

              【解决方案7】:

              在我的情况下,错误是由于我在 zookeeper 可用之前就开始创建主题造成的。由于我在脚本中完成了所有操作,因此在创建主题之前引入一些延迟会有所帮助。如果您的 zookeeper 客户端端口是2181,您可以通过以下方式检查您的代理的可用性:

              echo dump | nc zookeeper 2181 | grep brokers
              

              【讨论】:

                【解决方案8】:

                您的服务器上可能存在来自先前部署之一的剩余、失控的 zookeeper。列出 pod、容器、进程等,并检查它们的年龄/开始时间以发现它。

                【讨论】:

                  【解决方案9】:

                  我遇到了同样的问题,但最后我尝试了以下对我有用的步骤:

                  1) 使用以下命令在 Zookeeper 中创建 chroot:

                  zkCli.sh -server localhost:2181

                  创建 /kafka1 []

                  2) 对于 kafka 代理配置,修改 zookeeper.connect 并添加 chroot 路径: 例如。

                  在 server.properties 中:

                  zookeeper.connect=localhost:2181/kafka1

                  3)启动 Zookeeper

                  4)启动Kafka服务器

                  5) 创建一个主题如下: bin/kafka-topic.sh --create -zookeeper localhost:2181/kafka1 --replication-factor 1 --partitions 1 --topic data

                  6)确认创建的主题: bin/kafka-topics.sh --list --zookeeper localhost:2181/kafka1

                  我按照以下内容供参考: https://community.hortonworks.com/questions/102132/run-multiple-broker-versions-in-the-same-cluster.html

                  【讨论】:

                    【解决方案10】:

                    尝试在您的服务器中添加:

                    delete.topic.enable=true
                    

                    【讨论】:

                      【解决方案11】:

                      确保 kafka 服务器已正常启动。如果您使用-dameon 参数将kafka 服务器作为守护进程启动。尝试删除它,看看在启动过程中是否有任何错误。

                      我遇到的问题原来是文件访问问题,用户运行 kafka 无权访问我配置的日志目录。在我授予访问权限后,它就可以工作了!

                      【讨论】:

                        【解决方案12】:

                        删除我创建的唯一主题后遇到的相同情况。

                        解决它的方法是放下 Kafka 和 Zookeeper,更新 Kafka 设置(server.properties 文件),我在其中添加以下设置

                        delete.topic.enable=true
                        

                        保存文件,启动 Zookeeper 和 Kafka,一切照常运行。

                        【讨论】:

                          【解决方案13】:

                          您的 Zookeeper 无法看到任何 Kafka 代理。尝试登录到您的 Zookeepr 控制台:bin/zkCli.sh -server localhost:2181 在控制台上运行[zk: localhost:2181(CONNECTED) 2] ls /brokers/ids。它一定不会出现任何经纪人。您需要重新启动所有 Kafka 代理,并检查 kafka 进程日志。有时,即使进程显示为正在运行(ps -ef | grep kafka),它可能还没有真正完全启动,因为 Zookeeper 无法看到它。我对 Apache Kafka 发行版 0.11.0 也有同样的问题。

                          【讨论】:

                            【解决方案14】:

                            我也遇到过同样的问题。我解决了这个问题。我认为这是因为没有后台启动。 所以,我们需要启动背景

                            bin/kafka-server-start.sh config/server.properties &
                            bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test &
                            

                            【讨论】:

                              【解决方案15】:

                              如果我是你,我会试试这个代码:

                              bin/kafka-topics.sh --create --zookeeper localhost:2181/kafka --replication-factor 1 --partitions 1 --topic 测试

                              如果您使用的是 Zookeeper 分布在 3 个节点中的集群,您应该将 localhost:2181/kafka 替换为 direccion1:2181,direction2:2181,direction3:2181/kafka

                              【讨论】:

                                【解决方案16】:

                                您的服务器似乎没有启动,请检查日志是否有问题

                                杀死进程

                                sudo fuser -k 2181/tcp
                                

                                运行动物园管理员

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

                                运行卡夫卡

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

                                【讨论】:

                                  【解决方案17】:

                                  它清楚地表明 0 个代理可用。通过

                                  启动代理
                                  bin/zookeeper-server-start.sh config/zookeeper.properties
                                  bin/kafka-server-start.sh config/server.properties
                                  

                                  基于 Apache Kafka 教程然后尝试

                                  【讨论】:

                                    【解决方案18】:

                                    我也遇到了同样的问题。您必须遵循指南的这一部分: http://kafka.apache.org/documentation.html#quickstart_multibroker

                                    我没有创建任何代理。创建 2 个新代理,您将解决问题。请按照以下步骤操作:

                                    cp config/server.properties config/server-1.properties
                                    cp config/server.properties config/server-2.properties
                                    

                                    创建文件后,您必须对其进行一些更改:

                                    在“server-1.properties”中:

                                    broker.id=1
                                    port=9093 
                                    log.dir=/tmp/kafka-logs-1
                                    host.name=localhost
                                    

                                    (端口号必须是您服务器中的端口号。properties + 1。我有 9092,所以我必须写 9093)

                                    在“server-2.properties”中:

                                    broker.id=2
                                    port=9094
                                    log.dir=/tmp/kafka-logs-2
                                    host.name=localhost
                                    

                                    (端口号必须在 server-1 旁边。在我的情况下为 9094)

                                    【讨论】:

                                      猜你喜欢
                                      • 2015-03-22
                                      • 2019-06-01
                                      • 1970-01-01
                                      • 2020-10-12
                                      • 1970-01-01
                                      • 2020-05-30
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2021-02-07
                                      相关资源
                                      最近更新 更多