J'ai un cluster Kafka) fonctionnant avec 2 partitions. Je cherchais un moyen d'augmenter le nombre de partitions à 3. Cependant, je ne veux pas perdre les messages existants dans le sujet. J'ai essayé arrêter Kafka, modifier le server.properties
fichier pour augmenter le nombre de partitions à 3 et redémarrer Kafka. Cependant, cela ne semble rien changer. En utilisant Kafka ConsumerOffsetChecker
, je vois toujours qu'il utilise seulement 2 partitions. La version Kafka que j'utilise est la 0.8.2.2. Dans la version 0.8.1, il y avait un script appelé kafka-add-partitions.sh
, qui pourrait faire l'affaire. Cependant, je ne vois aucun script de ce type dans 0.8.2. Y a-t-il un moyen d'accomplir cela? J'ai expérimenté avec la création d'un tout nouveau sujet et pour celui-ci, il semble utiliser 3 partitions selon le changement dans le server.properties
fichier. Cependant, pour les sujets existants, cela ne semble pas être un problème.
On dirait que vous pouvez utiliser le script this à la place:
bin/kafka-topics.sh --zookeeper zk_Host:port/chroot --alter --topic my_topic_name
--partitions 40
Dans le code, on dirait qu'ils font la même chose:
AdminUtils.createOrUpdateTopicPartitionAssignmentPathInZK(topic, partitionReplicaList, zkClient, true)
kafka-topics.sh
Exécute this un morceau de code ainsi que AddPartitionsCommand utilisé par le script kafka-add-partition.
Cependant, vous devez être conscient du re-partitionnement lorsque vous utilisez key:
Sachez que l’un des cas d’utilisation des partitions consiste à partitionner sémantiquement les données et que l’ajout de partitions ne modifie pas le partitionnement des données existantes , ce qui peut gêner les utilisateurs si ils s'appuient sur cette partition. C'est-à-dire que si les données sont partitionnées par
hash(key) % number_of_partitions
, alors ce partitionnement sera potentiellement mélangé en ajoutant des partitions, mais Kafka ne tentera pas de redistribuer automatiquement les données de quelque manière que ce soit.
Dans mon cas, la valeur zk_Host:port/chroot
pour le paramètre --zookeeper
a lancé l'exception suivante:
ERREUR Java.lang.IllegalArgumentException: la rubrique mon_nom_topique n'existe pas sur le chemin ZK zk_Host: port/chroot.
J'ai donc essayé ce qui suit et cela a fonctionné:
bin/kafka-topics.sh --alter --zookeeper zk_Host:port --topic my_topic_name --partitions 10
Si vous utilisez Kafka dans une fenêtre, essayez ce code pour modifier ou ajouter une partition dans le sujet
.\bin\windows\kafka-topics.bat --alter --zookeeper localhost:2181 --topic TopicName --partitions 20
ou
.\bin\windows\kafka-topics.bat --alter --zookeeper localhost:2181 --topic TopicName --replica-assignment 0:1:2,0:1:2,0:1:2,2:1:0 --partitions 10