web-dev-qa-db-ja.com

Kafka 0.8.2の既存のトピックにパーティションを追加することは可能ですか?

2つのパーティションで実行されているKafkaクラスターがあります。パーティションカウントを3に増やす方法を探していましたが、トピック内の既存のメッセージを失いたくありません。 server.propertiesファイルを変更してパーティションの数を3に増やし、Kafkaを再起動して、Kafkaを停止しようとしました。ただし、それによって何も変わらないようです。 Kafka ConsumerOffsetCheckerを使用すると、まだ2つのパーティションしか使用していないことがわかります。使用しているKafkaバージョンは0.8.2.2です。バージョン0.8.1では、kafka-add-partitions.shと呼ばれるスクリプトが使用されていましたが、これでうまくいくと思います。ただし、0.8.2にはそのようなスクリプトはありません。これを達成する方法はありますか?私はまったく新しいトピックを作成する実験を行いましたが、そのトピックではserver.propertiesファイルの変更に従って3つのパーティションを使用しているようです。ただし、既存のトピックについては気にしないようです。

47
Asif Iqbal

代わりに this スクリプトを使用できるようです:

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

コードでは、同じことをしているように見えます:

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

kafka-topics.shは、kafka-add-partitionスクリプトによって使用される this コードの一部と AddPartitionsCommand を実行します。

ただし、キーを使用する場合は、再パーティション化に注意する必要があります。

パーティションの1つのユースケースは、データを意味的にパーティションすることであり、パーティションを追加しても既存のデータのパーティションは変更されないことに注意してください彼らはそのパーティションに依存しています。つまり、データがhash(key) % number_of_partitionsでパーティション化されている場合、このパーティション化はパーティションを追加することでシャッフルされる可能性がありますが、Kafkaはデータを自動的に再配布しません。

79
blockR

私の場合、パラメーターzk_Host:port/chrootの値--zookeeperは、次の例外をスローしました。

エラーJava.lang.IllegalArgumentException:トピックmy_topic_nameはZKパスzk_Host:port/chrootに存在しません。

だから、私は次を試してみましたが、うまくいきました:

 bin/kafka-topics.sh --alter --zookeeper zk_Host:port --topic my_topic_name --partitions 10
5
Chandan Kumar

ウィンドウでKafkaを使用している場合は、トピックのパーティションを変更または追加するためにこのコードを試してください

.\bin\windows\kafka-topics.bat --alter --zookeeper localhost:2181 --topic TopicName --partitions 20

または

.\bin\windows\kafka-topics.bat --alter --zookeeper localhost:2181 --topic TopicName --replica-assignment 0:1:2,0:1:2,0:1:2,2:1:0 --partitions 10

3
Aarya