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:
- Fahren Sie den Cluster herunter
- Bereinigen Sie das kafka-Protokollverzeichnis (angegeben durch das
log.dir
Attribut in der kafka- Konfigurationsdatei ) sowie die zookeeper-Daten
- Starten Sie den Cluster neu
Für jedes Thema können Sie Folgendes tun
- Hör auf Kafka
- Bereinigen Sie das partitionsspezifische Kafka-Protokoll. Kafka speichert seine Protokolldatei in einem Format von "logDir / topic-partition", sodass für ein Thema mit dem Namen "MyTopic" das Protokoll für die Partitions-ID 0 dort gespeichert wird,
/tmp/kafka-logs/MyTopic-0
wo /tmp/kafka-logs
es durch das log.dir
Attribut angegeben wird
- Starten Sie kafka neu
Dies ist NOT
ein guter und empfohlener Ansatz, der jedoch funktionieren sollte. In der Kafka Broker-Konfigurationsdatei wird das log.retention.hours.per.topic
Attribut zum Definieren verwendetThe number of hours to keep a log file before deleting it for some specific topic
Gibt es auch eine Möglichkeit, die Nachrichten zu löschen, sobald der Verbraucher sie liest?
Aus der Kafka-Dokumentation :
Der Kafka-Cluster speichert alle veröffentlichten Nachrichten - unabhängig davon, ob sie verbraucht wurden oder nicht - für einen konfigurierbaren Zeitraum. Wenn die Protokollaufbewahrung beispielsweise auf zwei Tage festgelegt ist, steht sie für die zwei Tage nach Veröffentlichung einer Nachricht zum Verzehr zur Verfügung. Danach wird sie verworfen, um Speicherplatz freizugeben. Die Leistung von Kafka ist in Bezug auf die Datengröße praktisch konstant, sodass das Beibehalten vieler Daten kein Problem darstellt.
Tatsächlich sind die einzigen Metadaten, die pro Verbraucher gespeichert werden, die Position des Verbrauchers im Protokoll, die als "Offset" bezeichnet wird. Dieser Versatz wird vom Verbraucher gesteuert: Normalerweise erhöht ein Verbraucher seinen Versatz beim Lesen von Nachrichten linear, aber tatsächlich wird die Position vom Verbraucher gesteuert und er kann Nachrichten in beliebiger Reihenfolge verbrauchen. Beispielsweise kann ein Verbraucher zur Wiederaufbereitung auf einen älteren Offset zurücksetzen.
Für den Start der Suche nach Offset in Kafka 0,8 lesen Einfaches Consumer Beispiel sagen sie
Kafka enthält zwei Konstanten, um zu helfen, kafka.api.OffsetRequest.EarliestTime()
findet den Anfang der Daten in den Protokollen und startet das Streaming von dort, kafka.api.OffsetRequest.LatestTime()
wird nur neue Nachrichten streamen.
Dort finden Sie auch den Beispielcode für die Verwaltung des Offsets bei Ihrem Kunden.
public static long getLastOffset(SimpleConsumer consumer, String topic, int partition,
long whichTime, String clientName) {
TopicAndPartition topicAndPartition = new TopicAndPartition(topic, partition);
Map<TopicAndPartition, PartitionOffsetRequestInfo> requestInfo = new HashMap<TopicAndPartition, PartitionOffsetRequestInfo>();
requestInfo.put(topicAndPartition, new PartitionOffsetRequestInfo(whichTime, 1));
kafka.javaapi.OffsetRequest request = new kafka.javaapi.OffsetRequest(requestInfo, kafka.api.OffsetRequest.CurrentVersion(),clientName);
OffsetResponse response = consumer.getOffsetsBefore(request);
if (response.hasError()) {
System.out.println("Error fetching data Offset Data the Broker. Reason: " + response.errorCode(topic, partition) );
return 0;
}
long[] offsets = response.offsets(topic, partition);
return offsets[0];
}