创建 Kafka 主题时出错 - 复制因子大于可用代理
Posted
技术标签:
【中文标题】创建 Kafka 主题时出错 - 复制因子大于可用代理【英文标题】:Error creating Kafka Topics- Replication factor larger than available brokers 【发布时间】: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 服务器的部分。 【参考方案1】:确保您的 config/server.properties 文件的 listeners 和 advertised.listeners 属性具有有效(且未注释)值。 p>
【讨论】:
【参考方案2】:问题是因为 data/kafkalogs 和 data/zookeeperlogs 文件夹中的日志。
-
保持这些文件夹不变,只需删除其中的日志即可。
杀死之前的进程,重新开始
启动 Zookeeper
启动 Kafka - 等待它是否重新启动或抛出任何错误。
创建一个主题(如果 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)
【讨论】:
以上是关于创建 Kafka 主题时出错 - 复制因子大于可用代理的主要内容,如果未能解决你的问题,请参考以下文章