Wann / wie wird ein zum Löschen markiertes Thema endgültig entfernt?

75

Ich habe den Befehl zum Löschen eines Themas ausgegeben:

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

Es schien eine glückliche Antwort zu geben:

[2014-05-31 20:58:10,112] INFO zookeeper state changed (SyncConnected) (org.I0Itec.zkclient.ZkClient)
Topic "vip_ips_alerts" queued for deletion.

Aber jetzt, 10 Minuten später, erscheint das Thema immer noch im --listBefehl:

./bin/kafka-topics.sh --zookeeper localhost:2181 --list
vip_ips_alerts - marked for deletion

Was bedeutet das? Wann wird das Thema wirklich gelöscht? Wie beschleunige ich diesen Prozess?

StephenBoesch
quelle

Antworten:

39

tl; dr Set delete.topic.enable = truein config/server.propertiesdem Kafka Makler und ... Geduld.

Dies geschieht mit der neuesten Entwicklungsversion von Kafka 0.8.3-SNAPSHOT :

➜  kafka_2.11-0.8.3-SNAPSHOT git:(trunk) ✗ ./bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic my-topic --partitions 2 --replication-factor 1
Created topic "my-topic".

➜  kafka_2.11-0.8.3-SNAPSHOT git:(trunk) ✗ ./bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic my-topic
Topic:my-topic  PartitionCount:2    ReplicationFactor:1 Configs:
    Topic: my-topic Partition: 0    Leader: 0   Replicas: 0 Isr: 0
    Topic: my-topic Partition: 1    Leader: 0   Replicas: 0 Isr: 0

➜  kafka_2.11-0.8.3-SNAPSHOT git:(trunk) ✗ ./bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic my-topic
Topic my-topic is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.

➜  kafka_2.11-0.8.3-SNAPSHOT git:(trunk) ✗ ./bin/kafka-topics.sh --zookeeper localhost:2181 --list
➜  kafka_2.11-0.8.3-SNAPSHOT git:(trunk) ✗

Der Punkt ist , haben , delete.topic.enable=truein config/server.propertiesdem Sie einen Kafka - Broker starten können.

➜  kafka_2.11-0.8.3-SNAPSHOT git:(trunk) ✗ grep delete.topic.enable config/server.properties
delete.topic.enable=true

Sie können auch sicherstellen, dass die Einstellung im Protokoll eines Brokers wahr ist:

➜  kafka_2.11-0.8.3-SNAPSHOT git:(trunk) ✗ ./bin/kafka-server-start.sh config/server.properties
[2015-07-24 22:33:26,184] INFO KafkaConfig values:
        ...
        delete.topic.enable = true
Jacek Laskowski
quelle
13
"geduldig sein" ist etwas ungenau - ich sitze hier Stunden nach dem Neustart der Broker (0.8.2) und warte darauf, dass diese Themen verschwinden, aber eine grobe Richtlinie darüber, wann sie tatsächlich verschwunden sind, wäre hilfreich. Bleiben sie die ganzen sieben Tage bei log.retention?
Rick Moritz
11
Nachdem ich eine Woche lang geduldig war, gehe ich davon aus, dass die Antwort im verknüpften Kommentar tatsächlich korrekt ist: Wenn "delete.topic.enable = true" während der Erstellung des Themas nicht festgelegt wurde, wird es beim Löschen nicht berücksichtigt.
Rick Moritz
Ich hatte dieses Problem, aber nach dem Ändern der server.properties und dem Neustart von kafka und zookeeper zeigte das Protokoll, dass das Thema gelöscht wurde
Richard Valdivieso
2
Bitte beachten Sie, dass delete.topic.enable seit 1.0 standardmäßig wahr ist. Version - siehe Issues.apache.org/jira/browse/KAFKA-5384
xmar
1
Ich habe über einen Tag lang ein Thema "zum Löschen markiert". Ich kann nicht auf unbestimmte Zeit "geduldig" sein. Ich muss das Thema löschen und mit den Arbeitsaufgaben fortfahren.
Ton
28

In meinem Fall, in dem ich Kafka 8.2.2 verwende, musste ich Einträge aus den folgenden manuell löschen:

  1. Löschen Sie den Themenordner vom Kafka-Broker.
  2. Loggen Sie sich bei zookeeper ein und -

    hbase zkcli
    rmr /brokers/topics/{topic_name}
    rmr /admin/delete_topics/{topic_name}
    
tesnik03
quelle
Nur das hat bei mir funktioniert, nur rmr-Befehle verwendet. Mit Kafka 11.0.1 wurde das zu löschende Thema erstellt, bevor delete.topic.enable auf true gesetzt wurde. Das Entfernen von Protokollen und der Neustart funktionierten nicht, da das Thema "zum Löschen markiert" blieb
Pafnucy
16

Du kannst es schaffen.

sudo ./zookeeper-shell.sh localhost: 2181 rmr / brokers / topic / your_topic

Anxo P.
quelle
13

Ich stand vor dem gleichen Problem und verbrachte ein paar Tage damit, mich mit dem Problem zu identifizieren. Ich habe den Befehl zum Löschen der Themen ausgelöst. Die Themen wurden jedoch zum Löschen markiert, aber nicht gelöscht.

  1. Ich habe zuerst die Konfiguration überprüft, die richtig eingestellt ist. Unter: server.properties

    delete.topic.enable = true für alle Broker

  2. Ich habe den Broker neu gestartet, um zu überprüfen, ob die Themen gelöscht wurden (Nein !!).
  3. Ich überprüfe keine Daten im Ordner / kafka / data.
  4. Ich habe sogar die Option in Betracht gezogen, zu warten, bis die Aufbewahrungszeit überschritten wurde.

Keiner half. Ich musste mich endlich bei zooker anmelden

./zkCli.sh # and delete the topics using 
rmr /brokers/topics/<<topic>> and rmr /admin/delete_topics/<<topic>>

Bitte denken Sie daran, kafka danach neu zu starten. Hoffe das löst dein Problem.

Jigar Shah
quelle
Heiliger ****. Danke dafür!
Ankush92
Könnte ich hinzufügen, dass ein Neustart von Kafka zumindest für mich nicht notwendig war.
Ankush92
Ja, das hat bei mir schnell funktioniert, ohne dass ein Neustart erforderlich war. Vielen Dank !
Apurv
4

Die richtige Antwort lautet tatsächlich wie folgt. HOT von der Gruppen-E-Mail-Verteilerliste des Kafka-Benutzers:

François Langelier *@gmail.com über kafka.apache.org 05:57 (vor 1 Stunde)

Ein Benutzer Das Thema Löschen funktioniert nicht am Geldautomaten

Ich denke, es wird in der nächsten Version https://issues.apache.org/jira/browse/KAFKA-1397 verfügbar sein

StephenBoesch
quelle
Übrigens erscheint es in der Version 0.8.1.1 - wir haben kürzlich ein Upgrade (von 0.8.1) durchgeführt und auch das Problem beobachtet
om-nom-nom
3

Mein Problem war etwas Ähnliches. Ich habe ein Thema gelöscht und es gab mir die gleiche Nachricht, als ich alle Themen auflistete.

Ich habe den Tierpfleger und den Makler gestürzt. setze die delete.topic.enable = true in meiner Broker-Konfigurationsdatei gestartet zookeeper und der Boker

Das Thema war weg ... dank Jacek Laskowski

Amar Dev
quelle
3

Für die Kafka-Version reicht 0.10.0.0es aus, das Löschen des Themas zu aktivieren, indem Sie Folgendes festlegen :

delete.topic.enable

Das Thema wird innerhalb weniger Augenblicke gelöscht

kafka-topics --delete --zookeeper your-zk:2181 --topic yourTopicName

Sie können mit dem folgenden Befehl bestätigen, dass es nicht mehr vorhanden ist:

kafka-topics --describe --zookeeper your-zk:2181 --topic yourTopicName
matomsik
quelle
2

Überprüfen Sie den Status des Themas bei zookeeper

bin\windows>kafka-topics.bat --list --zookeeper localhost:2181
Output: topic shows marked for deletion

Das Setzen von delete.topic.enable = true in server.properties funktionierte ebenfalls nicht.

Lösung: Überprüfen Sie den Speicherort des zookeeper-Datenverzeichnisses in der Datei zookeeper.properties. es war dataDir = / tmp / zookeeper .
Das Problem wurde behoben, nachdem "dataDir" an einen neuen Speicherort aktualisiert wurde.

dataDir=zk-temp
# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0
Debabrata
quelle
1

Wir hatten dieses Problem beim Löschen von Themen. Die Themen wurden erstellt, als delete.topic.enable = true nicht festgelegt wurde. Wir haben das in config festgelegt und kafka neu gestartet, um die neue Konfiguration anzuwenden. Löschte die Themen und sah das "zum Löschen markiert". Wir haben dann kafka wieder neu gestartet. Nach 40 Minuten wurden jedoch alle Themen gelöscht (9 Themen mit insgesamt Tausenden von Partitionen). Die Themen mit einer höheren Anzahl von Partitionen schienen länger zu dauern, was zunächst den Eindruck erweckte, dass nichts passierte.

MattLovesJam
quelle
1

Das Löschen erfolgte für mich fast sofort (v 0.9). Ich glaube, dass es für Sie genauso sein sollte.

Nach dem Markieren wird das Löschen auf dem Kafka-Knoten ausgelöst, der der Themenpartitionsleiter ist. Beachten Sie, dass der Themenpartitionsleiter korrekt konfiguriert sein muss (in Bezug auf Listener), da er sonst nicht die Anweisung zum Löschen der Protokolle erhält.

Ich hatte meine Themen zum Löschen markiert in diesem Zustand, bis ich meine Servereigenschaften korrigierte und den jeweiligen Knoten neu startete.

Francis Leung
quelle
0

Sobald das Thema in Kafka zum Löschen markiert ist, wird es nach 60000 Millisekunden endgültig entfernt.

Überprüfen Sie die Eigenschaft log.segment.delete.delay.ms.

Die Dokumentation sagt:

file.delete.delay.ms: Die Wartezeit vor dem Löschen einer Datei aus dem Dateisystem beträgt 60000 ms.

Pravin Agrawal
quelle