¿Es posible agregar particiones a un tema existente en Kafka 0.8.2


Tengo un cluster Kafka corriendo con 2 particiones. Estaba buscando una manera de aumentar el número de particiones a 3. Sin embargo, no quiero perder los mensajes existentes en el tema. Intenté detener Kafka, modificando el archivo server.properties para aumentar el número de particiones a 3 y reiniciar Kafka. Sin embargo, eso no parece cambiar nada. Usando Kafka ConsumerOffsetChecker, todavía veo que está usando solo 2 particiones. La versión de Kafka que estoy usando es 0.8.2.2. En la versión 0.8.1, solía haber un script llamado kafka-add-partitions.sh, que supongo que podría hacer el truco. Sin embargo, no veo ningún script de este tipo en 0.8.2. ¿Hay alguna manera de lograr esto? Experimenté con la creación de un tema completamente nuevo y para ese parece usar 3 particiones según el cambio en el archivo server.properties. Sin embargo, para los temas existentes, no parece importarle.

Author: Asif Iqbal, 2015-11-12

2 answers

Parece que puedes usar este script en su lugar:

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

En el código parece que hacen lo mismo:

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

kafka-topics.sh ejecuta este código así como AddPartitionsCommand usado por el script kafka-add-partition.

Sin embargo, debe tener en cuenta la re-partición cuando use key:

Tenga en cuenta que un caso de uso para las particiones es particionar semánticamente datos, y la adición de particiones no cambia la partición de los datos existentes por lo que esto puede molestar a los consumidores si confían en eso partición. Es decir, si los datos están particionados por hash(key) % number_of_partitions, entonces esta partición será potencialmente barajado mediante la adición de particiones, pero Kafka no intentará redistribuir automáticamente los datos de cualquier manera.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-24 12:35:07

En mi caso el valor zk_host:port/chroot para el parámetro --zookeeper arrojó la siguiente excepción:

ERROR java.lang.IllegalArgumentException: Topic my_topic_name no existe en la ruta ZK zk_host: port / chroot.

Así que probé lo siguiente y funcionó:

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-17 13:07:46