2016-11-18 13 views
0

文法的にカフカのトピックを再作成したい。 私はkafka.admin.AdminUtils同じものを使用しています。私が理解するトピックがないということですカフカトピックをプログラム的に再作成する

Exception in thread "main" kafka.common.TopicExistsException: Topic "new_topic" already exists. 
     at kafka.admin.AdminUtils$.createOrUpdateTopicPartitionAssignmentPathInZK(AdminUtils.scala:253) 
     at kafka.admin.AdminUtils$.createTopic(AdminUtils.scala:237) 
     at kafka.admin.AdminUtils.createTopic(AdminUtils.scala) 

:上記のコード

AdminUtils.deleteTopic(zkUtils, topicName); 
AdminUtils.createTopic(zkUtils, topicName, partitions, replicationFactor, new Properties()); 

、それが次の例外で失敗が数回ほとんどの時間を働いている:ここでは

は私roughtコードがあります適切に削除されています。私はここで間違って何をしていますか?

答えて

2

deletingTopicを呼び出した直後にcreateTopicを呼び出すことはできません。トピックを削除すると、非同期操作ですので、あなたがより良い必ずすべてのメタデータが正常に削除されています作ると思います

    1. 「delete.topic.enable」セット:二つのものが世話をしなければなりませんZookeeper内から新しいトピックを作成する前に

  • +0

    私はすでにdelete.topic.enableをtrueに設定しています。ポイント2を達成するために、削除操作が正常に完了したときに通知するkafkaからのコールバックがありますか? –

    +0

    アウトオブボックスのコールバック機能は使用できないようです。可能な方法は、zkノード '/ admin/delete_topics/'の存在を監視することです。このzkノードを削除することは、トピックを削除する最中ですが、監視するのが容易ではないコントローラーキャッシュをクリアする前に行われます。 – amethystic

    関連する問題