Est-il possible d'ajouter des partitions à un sujet existant dans Kafka 0.8.2
j'ai un cluster Kafka avec 2 partitions. Je cherchais un moyen d'augmenter le nombre de partitions à 3. Cependant, je ne veux pas perdre messages existants dans le sujet. J'ai essayé d'arrêter Kafka, en modifiant le server.properties
fichier pour augmenter le nombre de partitions à 3 et redémarrer Kafka. Cependant, cela ne semble pas changer quoi que ce soit. Utilisation De Kafka ConsumerOffsetChecker
, je vois encore, il est à l'aide de seulement 2 partitions. La version Kafka que j'utilise est 0.8.2.2. Dans la version 0.8.1, il y avait un script appelé kafka-add-partitions.sh
, qui je pense pourrait faire l'affaire. Cependant, je ne vois pas un tel script dans 0.8.2. Est-il possible de réaliser cela? J'ai essayé de créer 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, il ne semble pas se soucier.
2 réponses
Ressemble, vous pouvez utiliser script à 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 morceau de code aussi bien que AddPartitionsCommand utilisé par kafka-ajouter de la partition de script.
cependant, vous devez être conscient de re-partitionnement lorsque vous utilisez la touche:
soyez conscient qu'un cas d'utilisation pour les partitions est de partition sémantique données, et ajouter des partitions ne change pas le partitionnement des données existantes donc cela peut déranger les consommateurs si elles s'appuient sur partition. Si les données sont partitionnées par
hash(key) % number_of_partitions
puis ce partitionnement sera potentiellement mélangé par l'ajout de cloisons, mais Kafka ne tentera pas de de redistribuer les données en aucune façon.
Dans mon cas, la valeur zk_host:port/chroot
pour le paramètre --zookeeper
lançait l'exception suivante:
erreur java.lang.IllegalArgumentException: Topic my_topic_name n'existe pas sur le chemin ZK zk_host:port/chroot.
alors, j'ai essayé ce qui suit et ça a marché:
bin/kafka-topics.sh --alter --zookeeper zk_host:port --topic my_topic_name --partitions 10