创建Kafka主题时出错: - 复制因子大于可用的代理

Cou*_*unt 10 java scala apache-kafka kafka-consumer-api

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

 ZkClient zkClient = new ZkClient(kafkaHost, 10000, 10000, ZKStringSerializer$.MODULE$);
    AdminUtils.createTopic(zkClient, "pa_reliancepoc_telecom_usageevent", 10, 2, new Properties());
Run Code Online (Sandbox Code Playgroud)

但得到以下例外

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)
Run Code Online (Sandbox Code Playgroud)

但是,我可以使用shell命令创建主题.

Jay*_*ram 14

在你的代码中,

 AdminUtils.createTopic(zkClient, "pa_reliancepoc_telecom_usageevent", 10, 2, new Properties());
Run Code Online (Sandbox Code Playgroud)

第四个参数是复制因子.所以,你要创建一个话题的名字pa_reliancepoc_telecom_usageevent与分区count of 10replication 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)
Run Code Online (Sandbox Code Playgroud)

确保您正在运行kafka cluster with two broker nodes两个节点should be alive while creating the topic.

要在群集中运行kafka,请参阅此链接中的步骤6


use*_*864 5

配置您的本地计算机以启动和运行多个代理,以防万一您决定保留您的代理replication_factor > 1

您可以通过简单地拥有server.properties文件的多个副本来做到这一点 。例如
server-1.propertiesserver-2.properties

然后,您需要在每个文件中指定不同的broker.idport,以使其唯一。

   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
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令启动多个实例

> bin/kafka-server-start.sh config/server-1.properties &
> bin/kafka-server-start.sh config/server-2.properties &
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅步骤6:设置多代理群集