Czy można dodać partycje do istniejącego tematu w Kafka 0.8.2

Mam Klaster Kafka działający z 2 partycjami. Szukałem sposobu na zwiększenie liczby partycji do 3. Nie chcę jednak tracić istniejących wiadomości w temacie. Próbowałem zatrzymać Kafkę, zmodyfikować plik server.properties, aby zwiększyć liczbę partycji do 3 i ponownie uruchomić Kafkę. To jednak niczego nie zmienia. Używając Kafka ConsumerOffsetChecker, nadal widzę, że używa tylko 2 partycji. Wersja Kafka, której używam to 0.8.2.2. W wersji 0.8.1 istniał skrypt o nazwie kafka-add-partitions.sh, co chyba wystarczy. Nie widzę jednak takiego skryptu w 0.8.2. Czy jest jakiś sposób, aby to osiągnąć? Eksperymentowałem z tworzeniem zupełnie nowego tematu i w tym przypadku wydaje się, że używa 3 partycji zgodnie ze zmianą w pliku server.properties. Jednak w przypadku istniejących tematów nie wydaje się to przejmować.

Author: Asif Iqbal, 2015-11-12

2 answers

Wygląda na to, że możesz użyć tego skryptu zamiast:

bin/kafka-topics.sh --zookeeper zk_host:port/chroot --alter --topic my_topic_name 
   --partitions 40 

W kodzie wygląda na to, że robią to samo:

 AdminUtils.createOrUpdateTopicPartitionAssignmentPathInZK(topic, partitionReplicaList, zkClient, true)

kafka-topics.sh wykonuje ten fragment kodu, jak również AddPartitionsCommand używany przez skrypt kafka-add-partition.

Należy jednak pamiętać o ponownym partycjonowaniu przy użyciu klucza:

Należy pamiętać, że jednym z przypadków użycia partycji jest semantyczna partycja danych, a dodawanie partycji nie zmienia partycjonowanie istniejących danych , więc może to przeszkadzać konsumentom, jeśli polegają na partycja. Oznacza to, że jeśli dane są partycjonowane przez hash(key) % number_of_partitions, to partycjonowanie to może być przetasowane przez dodanie partycji, ale Kafka nie spróbuje automatycznie redystrybuować dane w dowolny sposób.

 54
Author: blockR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-24 12:35:07

W moim przypadku wartość zk_host:port/chroot dla parametru --zookeeper rzuciła następujący wyjątek:

Błąd Javy.lang.IllegalArgumentException: Topic my_topic_name nie istnieje na ścieżce ZK zk_host: port / chroot.

Więc, próbowałem następujące i zadziałało:

 bin/kafka-topics.sh --alter --zookeeper zk_host:port --topic my_topic_name --partitions 10
 2
Author: Chandan Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-17 13:07:46