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.

30
demandé sur Asif Iqbal 2015-11-12 20:43:31

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.

54
répondu blockR 2017-05-24 12:35:07

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
2
répondu Chandan Kumar 2018-08-17 13:07:46