创建 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 文件的 listenersadvertised.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 主题时出错 - 复制因子大于可用代理的主要内容,如果未能解决你的问题,请参考以下文章

Apache Kafka教程:主题复制

Debezium 创建新主题时如何编辑复制因子

Kafka学习-复制

分区 w.r.t 到代理和分区之间关于主题的关联

Kafka 容错及高可用原理 | 运维进阶

Kafka 容错及高可用原理 | 运维进阶