kafka以下のコードを使用してAdminCommand経由でトピックを作成しようとしています 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)
ただし、シェルコマンドを使用してトピックを作成できます。
あなたのコードでは、
AdminUtils.createTopic(zkClient, "pa_reliancepoc_telecom_usageevent", 10, 2, new Properties());
4番目の引数は複製係数です。したがって、パーティションpa_reliancepoc_telecom_usageevent
およびcount of 10
を使用して、replication of 2
という名前のトピックを作成しようとしています。したがって、トピックの作成中はtwo kafka brokers
を使用できる必要があります。 2つ未満の場合は、次の例外が発生します。
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
と2つのノードshould be alive while creating the topic.
を実行していることを確認してください
クラスターでkafka=を実行するには、 このリンク のステップ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 &
詳細については、 を確認してくださいステップ6:マルチブローカークラスターのセットアップ
複数のブローカーを設定しているときに、同じ問題に直面しました。
私が欠けていたステップは:
構成ファイルの編集中:config/server-1.properties:broker.id = 1 listeners = PLAINTEXT://:9093 log.dir =/tmp/kafka-logs-1
lOG BASICSセクションも更新する必要があります(以下を参照):
log.dirs=/tmp/kafka-logs-1