Kafka 0.8.1.1'deki konuyu sil


98

testApache Kafka 0.8.1.1'deki konuyu silmem gerekiyor.

Buradaki belgelerde ifade edildiği gibi, şunları yaptım:

bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test

Ancak bu, aşağıdaki mesajla sonuçlanır:

Command must include exactly one action: --list, --describe, --create or --alter

Bu konuyu nasıl silebilirim?


Adım adım prosedür şu
Ravindra babu

Yanıtlar:


110

0.8.1.1'de konuyu silmek her zaman çalışmıyor

Silme işlemi bir sonraki sürüm olan 0.8.2'de çalışmalıdır

kafka-topics.sh --delete --zookeeper localhost:2181 --topic your_topic_name

  Topic your_topic_name is marked for deletion.
  Note: This will have no impact if delete.topic.enable is not set to true.

Bir konuyu silmek mümkün mü?

Jira KAFKA-1397


Bilgi için teşekkürler. Tüm Kafka ve Zookeeper durumlarını belirtildiği gibi nasıl temizleyeceğinizi biliyor musunuz?
EmPak5

@EmPack IIRC, bunu yapmanın en kolay yolu (eğer zamanı önemsemiyorsanız) tüm aracılarınızı kapatmak, o konu için günlüklerinizi silmek ve ZK ad alanını değiştirmektir.
Frank

95

Görünüşe göre silme komutu bilinen bir hata nedeniyle Kafka 0.8.1.x'de resmi olarak belgelenmemiş ( https://issues.apache.org/jira/browse/KAFKA-1397 ).

Bununla birlikte, komut hala kodda gönderiliyordu ve şu şekilde yürütülebilir:

bin/kafka-run-class.sh kafka.admin.DeleteTopicCommand --zookeeper localhost:2181 --topic test

Bu arada, hata düzeltildi ve silme komutu artık resmi olarak Kafka 0.8.2.0'dan şu şekilde edinilebilir:

bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test

Okuduklarıma göre, 0.8.1.1 işe yarayabilir, ama işe yaramayabilir ... Düzeltme de bir süredir bagajda, bu yüzden kaynakları doğrudan bagajdan aldıysanız, işe yaramalı
Frank

0.8.1.1'de yeni denedim, "silme işleminin başarılı olduğunu" bildiriyor ama işe yaramadı. Konu hala orada, bir tüketici ekleyebilirim ve önceki tüm öğeleri beklemede olarak bildirir.
Elias Dorneles

Kafka 0.8.1.1'de konuları silmek çalışmıyor. Yakın zamanda yayınlanan 0.8.2.0 sürümü nihayet uygun silme desteğine sahip olmalıdır. Bkz. Blog.confluent.io/2014/12/02/whats-coming-in-apache-kafka-0-8-2 .
Michael G. Noll

BTW, delete.topic.enable = true özelliği server.properties dosyasında bulunabilir. Varsayılan olarak yorumlanmıştır.
Shanemeister

38

$ {Kafka_home} /config/server.properties içinde aşağıdaki satırı ekleyin

delete.topic.enable=true

Kafka sunucusunu yeni yapılandırma ile yeniden başlatın:

${kafka_home}/bin/kafka-server-start.sh ~/kafka/config/server.properties

İstediğiniz konuları silin:

${kafka_home}/bin/kafka-topics.sh --delete  --zookeeper localhost:2181  --topic daemon12

10

Andrea haklı. bunu komut satırını kullanarak yapabiliriz.

Ve yine de programlayabiliriz.

ZkClient zkClient = new ZkClient("localhost:2181", 10000);
zkClient.deleteRecursive(ZkUtils.getTopicPath("test2"));

Aslında Kafka 0.8.1.1'de konuyu silmenizi önermiyorum. Bu konuyu bu yöntemle silebilirim, ancak günlüğü zookeeper için kontrol ederseniz, silme işlemi karıştırır.


Ayrıca zkClient.deleteRecursive (ZkUtils.getTopicConfigPath ("test2")) içermesi gerekir; ve
Zirve

@Sumit ve ne? Bu "getTopicConfigPath" i kullanmadım. Aslında Kafka 0.8.1.1'de konuyu silmenizi önermiyorum. Bu konuyu bu yöntemle silebilirim, ancak günlüğü zookeeper için kontrol ederseniz, silme işlemi karıştırır.
Liang

ancak kafka da bunu böyle yapıyor (sizin önerdiğiniz şekilde): apache.googlesource.com/kafka/+/0.8.1/core/src/main/scala/kafka/…
Sumit

@Sumit. evet, kodu oradan buldum. Bu "dağınık" şeyden emin değilim. Çünkü şirket sunucumdaki bir konuyu sildiğimde, silme işlemi zookeeper günlüğüne çok sayıda önemsiz veri üretiyor. Ama onu kendi yerelimde yeniden üretemiyorum. Bu yüzden bunu önermiyorum ..
Liang

4

testZookeeper shell command ( zookeeper-shell.sh) ' dan belirli bir kafka konusunu (örnek:) silebilirsiniz . Konuyu silmek için aşağıdaki komutu kullanın

rmr {path of the topic}

misal:

rmr /brokers/topics/test

delete.topic.enable = true olarak ayarlayın, ardından kafka'dan silin ve ayrıca zookeeper'dan da silin ...
minhas23

4

Kafka'da 1 veya Daha Fazla Konuyu Silme Adımları

Kafka'daki konuları silmek için Kafka sunucusunda silme seçeneğinin etkinleştirilmesi gerekir.

1. Go to {kafka_home}/config/server.properties
2. Uncomment delete.topic.enable=true

Kafka'da bir Konuyu silin aşağıdaki komutu girin

kafka-topics.sh --delete --zookeeper localhost: 2181 --topic

Birden fazla konuyu kafka'dan silmek için

(birden fazla konu oluşturduğum ve farklı senaryolar için bunları silmem gerektiği test amaçları için iyi)

  1. Kafka Sunucusunu ve Zookeeper'ı durdurun
  2. günlüklerin depolandığı / tmp klasörüne gidin ve kafkalogs ve zookeeper klasörünü manuel olarak silin
  3. Zookeeper ve kafka sunucusunu yeniden başlatın ve konuları listelemeye çalışın,

bin / kafka-topics.sh --list --zookeeper localhost: 2181

hiçbir konu listelenmemişse, tüm konular başarıyla silinmiştir. Konular listeleniyorsa, silme işlemi başarılı olmamıştır. Yukarıdaki adımları tekrar deneyin veya bilgisayarınızı yeniden başlatın.


Şu anda en son Kafka sürümü (1.0.0) için bu seçeneğin server.propertiesdosyada görünmediğini unutmayın . Bu satırı manuel olarak eklemelisiniz.
David Corral

@DavidCorral konu silme özelliği 1.0.0'da varsayılan olarak etkindir
Tanner

2

Bu adımlar tüm konuları ve verileri silecek

  • Kafka-server ve Zookeeper-server'ı durdurun
  • Her iki hizmetin tmp veri dizinlerini kaldırın, varsayılan olarak bunlar C: / tmp / kafka-logs ve C: / tmp / zookeeper'dır.
  • sonra Zookeeper-server ve Kafka-server'ı başlatın


1

Yukarıdaki cevaplara ek olarak, zookeeper tüketici ofset yolunda o konuyla ilişkili meta verileri silmek gerekir.

bin/zookeeper-shell.sh zookeeperhost:port

rmr /consumers/<sample-consumer-1>/offsets/<deleted-topic>

Aksi takdirde, zookeeper tabanlı kafka izleme araçlarında gecikme negatif olacaktır.


1

Doc de belirtildiği gibi burada

Konu silme seçeneği varsayılan olarak devre dışıdır. Etkinleştirmek için sunucu yapılandırmasını delete.topic.enable = true ayarlayın Kafka şu anda bir konu için bölüm sayısını azaltmayı veya çoğaltma faktörünü değiştirmeyi desteklemiyor.

Delete.topic.enable = true olduğundan emin olun


Bu seçeneğin yalnızca 8.2'de mevcut olduğuna inanıyorum
spuder

1
bin/kafka-topics.sh –delete –zookeeper localhost:2181 –topic <topic-name>

0

Konuları silmekte sorun yaşıyorsanız, konuyu kullanarak silmeyi deneyin:

$KAFKA_HOME/bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic your_topic_name

komut. Daha sonra silme işlemini doğrulamak için normalde altında bulunan kafka günlükler dizinine gidin ve /tmp/kafka-logs/ardından komut your_topic_namearacılığıyla dosyayı silin rm -rf your_topic_name.

Tüm süreci bir kafka yönetim aracı ile izlemeyi unutmayın Kafka Tool.

Yukarıda bahsedilen işlem, kafka sunucusunu yeniden başlatmadan konuları kaldıracaktır.


0

1. Adım: Hayvan bekçisi ve Kafka koşmaya bağlı olduğunuzdan emin olun

Adım 2: Kafka konusunu silmek için, kullanıyorsanız Kafka-topic (Mac) veya Kafka-topic.sh çalıştırın (linux / Mac) bağlantı noktasını ve --topic'i konunuzun adıyla ekleyin ve --delete ile konuyu silin. başarı.

# Delete the kafka topic
# it will delete the kafka topic
kafka-topics --zookeeper 127.0.0.1:2181 --topic name_of_topic --delete
# or
kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic name_of_topic --delete

0

Öncelikle, konunuzu silmek için bu komutu çalıştırırsınız:

$ bin/kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic <topic_name>

Tamamen silmeyi kontrol etmek için aktif konuları listeleyin:

$ bin/kafka-topics.sh --list --bootstrap-server localhost:9092
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.