我正在尝试使用以下代码Source
通过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命令创建主题。
答案 0 :(得分:13)
在您的代码中,
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答案 1 :(得分:4)
配置您的本地计算机以启动并运行多个代理,以防您决定保留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 &
答案 2 :(得分:0)
我在设置多个经纪人时面临同样的问题。
我缺少的一步是:
编辑配置文件时: 配置/ server-1.properties: broker.id = 1 听众= PLAINTEXT://:9093 log.dir = / TMP /卡夫卡-日志-1
还需要更新LOG BASICS部分(见下文):
#######################日志基础知识log.dirs=/tmp/kafka-logs-1