创建 Kafka 主题时出错:- 复制因子大于可用代理
Error creating Kafka topic :- replication factor larger than available brokers
我正在尝试使用以下代码通过 AdminCommand 创建一个 kafka 主题 Source
ZkClient zkClient = new ZkClient(kafkaHost, 10000, 10000, ZKStringSerializer$.MODULE$);
AdminUtils.createTopic(zkClient, "pa_reliancepoc_telecom_usageevent", 10, 2, new Properties());
但出现以下异常
Exception in thread "main" 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:155)
但是,我可以使用 shell 命令创建主题。
在您的代码中,
AdminUtils.createTopic(zkClient, "pa_reliancepoc_telecom_usageevent", 10, 2, new Properties());
第四个参数是复制因子。因此,您正在尝试创建一个名称为 pa_reliancepoc_telecom_usageevent
且分区为 count of 10
和 replication of 2
的主题。因此 two kafka brokers
在创建主题时应该可用。如果少于两个可用,那么您将得到以下异常。
Exception in thread "main" 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:155)
确保你是运行宁kafka cluster with two broker nodes
和两个节点should be alive while creating the topic.
集群中的运行 kafka参考this link
中的步骤6
将您的本地计算机配置为启动多个代理,并 运行 以防您决定保留 replication_factor > 1
。
您只需拥有多个副本即可做到这一点
server.properties
文件。例如
server-1.properties
& server-2.properties
然后您需要在每个文件中指定不同的 broker.id
& port
以使它们独一无二..
config/server-1.properties:
broker.id=1
port=9093
log.dir=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
port=9094
log.dir=/tmp/kafka-logs-2
然后使用以下命令启动多个实例
> bin/kafka-server-start.sh config/server-1.properties &
> bin/kafka-server-start.sh config/server-2.properties &
有关详细信息,请查看 Step 6: Setting up a multi-broker cluster
我在设置多个代理时遇到了同样的问题。
我缺少的步骤是:
编辑配置文件时:
config/server-1.属性:
broker.id=1
listeners=PLAINTEXT://:9093
log.dir=/tmp/kafka-logs-1
还需要更新 LOG BASICS 部分(见下文):
#######################日志基础
用于存储日志文件的目录的逗号分隔列表
log.dirs=/tmp/kafka-logs-1
我正在尝试使用以下代码通过 AdminCommand 创建一个 kafka 主题 Source
ZkClient zkClient = new ZkClient(kafkaHost, 10000, 10000, ZKStringSerializer$.MODULE$);
AdminUtils.createTopic(zkClient, "pa_reliancepoc_telecom_usageevent", 10, 2, new Properties());
但出现以下异常
Exception in thread "main" 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:155)
但是,我可以使用 shell 命令创建主题。
在您的代码中,
AdminUtils.createTopic(zkClient, "pa_reliancepoc_telecom_usageevent", 10, 2, new Properties());
第四个参数是复制因子。因此,您正在尝试创建一个名称为 pa_reliancepoc_telecom_usageevent
且分区为 count of 10
和 replication of 2
的主题。因此 two kafka brokers
在创建主题时应该可用。如果少于两个可用,那么您将得到以下异常。
Exception in thread "main" 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:155)
确保你是运行宁kafka cluster with two broker nodes
和两个节点should be alive while creating the topic.
集群中的运行 kafka参考this link
中的步骤6将您的本地计算机配置为启动多个代理,并 运行 以防您决定保留 replication_factor > 1
。
您只需拥有多个副本即可做到这一点
server.properties
文件。例如 server-1.properties
& server-2.properties
然后您需要在每个文件中指定不同的 broker.id
& port
以使它们独一无二..
config/server-1.properties:
broker.id=1
port=9093
log.dir=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
port=9094
log.dir=/tmp/kafka-logs-2
然后使用以下命令启动多个实例
> bin/kafka-server-start.sh config/server-1.properties &
> bin/kafka-server-start.sh config/server-2.properties &
有关详细信息,请查看 Step 6: Setting up a multi-broker cluster
我在设置多个代理时遇到了同样的问题。
我缺少的步骤是:
编辑配置文件时: config/server-1.属性: broker.id=1 listeners=PLAINTEXT://:9093 log.dir=/tmp/kafka-logs-1
还需要更新 LOG BASICS 部分(见下文):
#######################日志基础用于存储日志文件的目录的逗号分隔列表
log.dirs=/tmp/kafka-logs-1