Gibt es eine Möglichkeit, alle Daten aus einem Thema zu löschen oder das Thema vor jedem Lauf zu löschen?
Kann ich die Datei KafkaConfig.scala ändern, um die logRetentionHours
Eigenschaft zu ändern ? Gibt es eine Möglichkeit, die Nachrichten zu löschen, sobald der Verbraucher sie liest?
Ich verwende Produzenten, um die Daten von irgendwoher abzurufen und an ein bestimmtes Thema zu senden, das ein Verbraucher konsumiert. Kann ich bei jedem Lauf alle Daten aus diesem Thema löschen? Ich möchte jedes Mal nur neue Daten im Thema. Gibt es eine Möglichkeit, das Thema irgendwie neu zu initialisieren?
apache-kafka
apache-zookeeper
TommyT
quelle
quelle
Antworten:
Glaube nicht, dass es noch unterstützt wird.Schauen Sie sich dieses JIRA-Problem "Unterstützung zum Löschen von Themen hinzufügen" an.So löschen Sie manuell:
log.dir
Attribut in der kafka- Konfigurationsdatei ) sowie die zookeeper-DatenFür jedes Thema können Sie Folgendes tun
/tmp/kafka-logs/MyTopic-0
wo/tmp/kafka-logs
es durch daslog.dir
Attribut angegeben wirdDies ist
NOT
ein guter und empfohlener Ansatz, der jedoch funktionieren sollte. In der Kafka Broker-Konfigurationsdatei wird daslog.retention.hours.per.topic
Attribut zum Definieren verwendetThe number of hours to keep a log file before deleting it for some specific topic
Aus der Kafka-Dokumentation :
Für den Start der Suche nach Offset in Kafka 0,8 lesen Einfaches Consumer Beispiel sagen sie
Dort finden Sie auch den Beispielcode für die Verwaltung des Offsets bei Ihrem Kunden.
quelle
brokers/topics/<topic_to_delete>
sowie die Protokolle löschen , um es loszuwerden.kafka-run-class.sh kafka.admin.DeleteTopicCommand
.kafka-run-class.sh kafka.admin.TopicCommand --delete --topic [topic_to_delete] --zookeeper localhost:2181
Wie ich hier erwähnte Purge Kafka Queue :
In Kafka 0.8.2 für das Schnellstartbeispiel getestet: Fügen Sie zunächst eine Zeile zur Datei server.properties im Konfigurationsordner hinzu:
Dann können Sie diesen Befehl ausführen:
quelle
Getestet mit Kafka 0.10
Hinweis: Wenn Sie Themenordner in Kafka-Protokollen löschen, jedoch nicht aus dem Zookeeper-Datenordner, werden weiterhin Themen angezeigt.
quelle
Im Folgenden finden Sie Skripts zum Leeren und Löschen eines Kafka-Themas, wobei localhost als zookeeper-Server angenommen wird und Kafka_Home auf das Installationsverzeichnis festgelegt ist:
Das folgende Skript leert ein Thema, indem die Aufbewahrungszeit auf 1 Sekunde festgelegt und die Konfiguration entfernt wird:
Um Themen vollständig zu löschen , müssen Sie alle anwendbaren Kafka-Broker stoppen und ihre Verzeichnisse aus dem Kafka-Protokollverzeichnis entfernen (Standard: / tmp / kafka-logs) und dann dieses Skript ausführen, um das Thema aus dem Zookeeper zu entfernen. Um zu überprüfen, ob es aus dem Zookeeper gelöscht wurde, sollte die Ausgabe von ls / brokers / topic nicht mehr das folgende Thema enthalten:
quelle
grep "log.retention.check.interval" $Kafka_Home/config/server.properties
--add config
eher so--add-config
Wir haben ziemlich genau versucht, was die anderen Antworten mit mäßigem Erfolg beschreiben. Was für uns wirklich funktioniert hat (Apache Kafka 0.8.1), ist der Klassenbefehl
sh kafka-run-class.sh kafka.admin.DeleteTopicCommand --topic yourtopic --zookeeper localhost: 2181
quelle
Error: Could not find or load main class kafka.admin.DeleteTopicCommand
Als schmutzige Problemumgehung können Sie die Einstellungen für die Laufzeitaufbewahrung pro Thema anpassen, z. B.
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic my_topic --config retention.bytes=1
( Aufbewahrungsbytes = 0 funktionieren möglicherweise auch).Nach kurzer Zeit sollte Kafka den Platz freigeben. Ich bin mir nicht sicher, ob dies Auswirkungen auf die Neuerstellung des Themas hat.
ps. Bringen Sie die Retentionseinstellungen besser zurück, sobald die Reinigung abgeschlossen ist.
Sie können auch
retention.ms
historische Daten beibehaltenquelle
Für Brauanwender
Wenn Sie
brew
wie ich verwenden und viel Zeit damit verschwenden, nach dem berüchtigtenkafka-logs
Ordner zu suchen , fürchten Sie sich nicht mehr. (und bitte lassen Sie mich wissen, ob das für Sie und mehrere verschiedene Versionen von Homebrew, Kafka usw. funktioniert :))Sie werden es wahrscheinlich finden unter:
Ort:
/usr/local/var/lib/kafka-logs
Wie man diesen Weg tatsächlich findet
(Dies ist auch hilfreich für praktisch jede App, die Sie über Brew installieren.)
1)
brew services list
2) Öffnen und lesen
plist
Sie das oben gefundene3) Finden Sie die Linie, die den
server.properties
Ort definiert, öffnen Sie sie, in meinem Fall:/usr/local/etc/kafka/server.properties
4) Suchen Sie nach der
log.dirs
Zeile:5) Gehen Sie zu diesem Speicherort und löschen Sie die Protokolle für die gewünschten Themen
6) Starten Sie Kafka mit neu
brew services restart kafka
quelle
Alle Daten zu Themen und deren Partitionen werden in gespeichert
tmp/kafka-logs/
. Darüber hinaus werden sie in einem Format gespeichert.topic-partionNumber
Wenn Sie also ein Thema löschen möchtennewTopic
, können Sie:rm -rf /tmp/kafka-logs/newTopic-*
quelle
log.retention.hours
und hinzufügenlog.retention.ms=1000
. Es würde die Aufzeichnung über Kafka Topic nur für eine Sekunde halten.log.retention.hours
auf die gewünschte Zahl einstellen .quelle
Ab der Version kafka 2.3.0 gibt es eine alternative Möglichkeit zum sanften Löschen von Kafka (alte Ansätze sind veraltet).
Aktualisieren Sie Retention.ms auf 1 Sek. (1000 ms) und setzen Sie es nach einer Minute erneut auf die Standardeinstellung, dh 7 Tage (168 Stunden, 604.800.000 in ms).
Weiches Löschen: - (rentention.ms = 1000) (mit kafka-configs.sh)
Standardeinstellung: - 7 Tage (168 Stunden, Retention.ms = 604800000)
quelle
Wenn Sie ein Thema manuell aus einem Kafka-Cluster löschen, können Sie dies unter https://github.com/darrenfu/bigdata/issues/6 überprüfen. Ein wichtiger Schritt, der in den meisten Lösungen häufig übersehen wird, ist das Löschen des
/config/topics/<topic_name>
in ZK.quelle
Ich benutze dieses Skript:
quelle
Ich verwende das folgende Dienstprogramm, um nach meinem Integrationstestlauf zu bereinigen.
Es verwendet die neueste
AdminZkClient
API. Die ältere API ist veraltet.Es gibt eine Option zum Löschen von Themen. Es markiert jedoch das Thema zum Löschen. Zookeeper löscht das Thema später. Da dies unvorhersehbar lang sein kann, bevorzuge ich den Retention.ms-Ansatz
quelle