10

我正在尝试使用以下代码源通过 AdminCommand 创建一个 kafka 主题

 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 command 创建主题。

4

3 回答 3

14

在您的代码中,

 AdminUtils.createTopic(zkClient, "pa_reliancepoc_telecom_usageevent", 10, 2, new Properties());

第四个参数是复制因子。因此,您正在尝试创建一个名为pa_reliancepoc_telecom_usageeventwith partitioncount 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,请参阅此链接中的第 6 步

于 2015-01-23T08:58:27.150 回答
5

配置您的本地计算机以启动并运行多个代理,以防您决定保留您的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 &

有关更多详细信息,请查看第 6 步:设置多代理集群

于 2015-01-23T09:30:43.133 回答
0

我在设置多个经纪人时遇到了同样的问题。

我缺少的步骤是:

编辑配置文件时: config/server-1.properties: broker.id=1 listeners=PLAINTEXT://:9093 log.dir=/tmp/kafka-logs-1

还需要更新 LOG BASICS 部分(见下文):

###################### 日志基础

用于存储日志文件的目录的逗号分隔列表

log.dirs=/tmp/kafka-logs-1
于 2017-03-21T09:33:50.663 回答