J'essaie de créer un sujet kafka via AdminCommand en utilisant le code ci-dessous Source
ZkClient zkClient = new ZkClient(kafkaHost, 10000, 10000, ZKStringSerializer$.MODULE$);
AdminUtils.createTopic(zkClient, "pa_reliancepoc_telecom_usageevent", 10, 2, new Properties());
Mais obtenir l'exception ci-dessous
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)
Cependant, je suis capable de créer le sujet en utilisant la commande Shell.
Dans votre code,
AdminUtils.createTopic(zkClient, "pa_reliancepoc_telecom_usageevent", 10, 2, new Properties());
Le quatrième argument est le facteur de réplication. Vous essayez donc de créer une rubrique avec le nom pa_reliancepoc_telecom_usageevent
avec la partition count of 10
et replication of 2
. Donc, two kafka brokers
devrait être disponible lors de la création du sujet. Si moins de deux sont disponibles, vous obtiendrez l'exception suivante.
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)
Assurez-vous d’exécuter kafka cluster with two broker nodes
et les deux nœuds should be alive while creating the topic.
.
Pour exécuter kafka en cluster, reportez-vous à l'étape 6 de ce lien
configurez votre ordinateur local pour que plusieurs courtiers soient opérationnels si vous décidez de conserver votre replication_factor > 1
.
Vous pouvez le faire simplement en ayant plusieurs copies du fichier server.properties
. par exemple server-1.properties
& server-2.properties
Vous devez ensuite spécifier différents broker.id
& port
dans chacun de ces fichiers pour les rendre uniques.
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
Et puis démarrez plusieurs instances avec les commandes suivantes
> bin/kafka-server-start.sh config/server-1.properties &
> bin/kafka-server-start.sh config/server-2.properties &
Pour plus de détails, consultez Étape 6: Configuration d’un cluster multi-courtiers
J'ai rencontré le même problème lors de la mise en place de plusieurs courtiers.
L'étape qui me manquait était:
Lors de l'édition du fichier de configuration: config/server-1.properties: broker.id = 1 listeners = PLAINTEXT: //: 9093 log.dir =/tmp/kafka-logs-1
il faut également mettre à jour la section LOG BASICS (voir ci-dessous):
log.dirs=/tmp/kafka-logs-1