2015-02-18 12 views
20

Ich benutze Apache Kafka, um eine 5 GB große Datei zu produzieren und zu konsumieren. Ich möchte wissen, ob es eine Möglichkeit gibt, die Nachricht vom Thema automatisch zu entfernen, nachdem sie verbraucht wurde. Kann ich die konsumierten Nachrichten verfolgen? Ich möchte es nicht manuell löschen.Nachricht löschen nach dem Verbrauch in KAFKA

Antwort

22

In Kafka liegt die Verantwortung für das, was konsumiert wurde, in der Verantwortung des Verbrauchers und dies ist auch einer der Hauptgründe, warum Kafka eine so große horizontale Skalierbarkeit hat.

Die Verwendung der High-Level-Consumer-API führt dies automatisch durch, indem konsumierte Offsets in Zookekeeper übergeben werden (oder eine neuere Konfigurationsoption verwendet ein spezielles Kafka-Thema, um die konsumierten Nachrichten zu verfolgen).

Mit der einfachen Consumer-API können Sie selbst entscheiden, wie und wo Sie die konsumierten Nachrichten selbst nachverfolgen können.

Das Löschen von Nachrichten in Kafka erfolgt automatisch, indem entweder eine Aufbewahrungszeit für ein Thema festgelegt wird oder indem ein Festplattenkontingent definiert wird. Für Ihre Fall einer 5GB Datei wird diese Datei gelöscht, nachdem die Aufbewahrungsfrist definiert wurde bestanden, unabhängig davon, ob es verbraucht wurde oder nicht.

6

Nach meinem Wissen können Sie Löschen die verbrauchten Daten aus den Protokollen durch Reduzierung der Speicherzeit. Die Standardzeit für das Protokoll wird für 168 Stunden festgelegt, und dann werden die Daten automatisch aus dem Kafka-Topic entfernt, das Sie erstellt haben. Also, mein Vorschlag ist es, die gehen auf die server.properties, die in der Config-Ordner befindet und die Änderung der auf eine Mindestzeit zu reduzieren. so ist es keine Daten nach der bestimmten Zeit, die Sie für die log.retention.hours gesetzt haben. So wird Ihr Problem gelöst werden.

log.retention.hours = 168

Halten Codierung