java - quickstart - ¿Es posible agregar particiones a un tema existente en Kafka 0.8.2?
kafka vs rabbitmq (2)
En mi caso, el valor zk_host:port/chroot
para el parámetro --zookeeper
lanzó la siguiente excepción:
ERROR java.lang.IllegalArgumentException: el tema my_topic_name no existe en la ruta ZK zk_host: puerto / chroot.
Entonces, probé lo siguiente y funcionó:
bin/kafka-topics.sh --alter --zookeeper zk_host:port --topic my_topic_name --partitions 10
Tengo un clúster Kafka que se ejecuta 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. Al usar 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 tal script en 0.8.2. ¿Hay alguna manera de lograr esto? Experimenté con la creación de un tema completamente nuevo y para eso parece que utiliza 3 particiones según el cambio en el archivo server.properties
. Sin embargo, para los temas existentes, no parece importarle.
Parece que puedes usar this 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 this fragmento de código, así como también AddPartitionsCommand utilizado por el AddPartitionsCommand kafka-add-partition.
Sin embargo, debe tener en cuenta la re-partición cuando use la clave:
Tenga en cuenta que un caso de uso para las particiones es la partición semántica de los datos, y la adición de particiones no modifica la partición de los datos existentes, por lo que esto puede molestar a los consumidores si se basan en esa partición. Esto es, si los datos se particionan con
hash(key) % number_of_partitions
entonces esta partición se barajará potencialmente agregando particiones, pero Kafka no intentará redistribuir automáticamente los datos de ninguna manera.