Non credo che sia ancora supportato. Dai un'occhiata a questo problema di JIRA "Aggiungi supporto per l'eliminazione dell'argomento".
Per eliminare manualmente:
- Arresta il cluster
- Pulisci la directory del registro di kafka (specificata dall'attributo
log.dir
nel file di configurazione di kafka ) così come i dati del guardiano dello zoo
- Riavvia il cluster
Per qualsiasi argomento quello che puoi fare è
- Smetti di kafka
- Pulire registro Kafka specifico per partizione, Kafka memorizza il file di log in un formato di "logdir / argomento-partition" così per un argomento denominato "MyTopic" il registro per la partizione id 0 verrà memorizzato in
/tmp/kafka-logs/MyTopic-0
cui /tmp/kafka-logs
viene specificato dal log.dir
dell'attributo
- Riavvia kafka
Questo è NOT
un approccio valido e consigliato ma dovrebbe funzionare. Nel file di configurazione del broker Kafka l' log.retention.hours.per.topic
attributo viene utilizzato per definireThe number of hours to keep a log file before deleting it for some specific topic
Inoltre, esiste un modo in cui i messaggi vengono eliminati non appena il consumatore li legge?
Dalla documentazione di Kafka :
Il cluster Kafka conserva tutti i messaggi pubblicati, che siano stati consumati o meno, per un periodo di tempo configurabile. Ad esempio, se la conservazione del registro è impostata su due giorni, per i due giorni successivi alla pubblicazione un messaggio è disponibile per il consumo, dopodiché verrà scartato per liberare spazio. Le prestazioni di Kafka sono effettivamente costanti rispetto alla dimensione dei dati, quindi conservare molti dati non è un problema.
In effetti gli unici metadati conservati per consumatore sono la posizione del consumatore nel log, chiamato "offset". Questo offset è controllato dal consumatore: normalmente un consumatore avanza il suo offset linearmente mentre legge i messaggi, ma in realtà la posizione è controllata dal consumatore e può consumare i messaggi nell'ordine che preferisce. Ad esempio, un consumatore può ripristinare un vecchio offset per rielaborare.
Per trovare l'offset iniziale da leggere nell'esempio di Kafka 0.8 Simple Consumer , dicono
Kafka include due costanti per aiutare, kafka.api.OffsetRequest.EarliestTime()
trova l'inizio dei dati nei log e avvia lo streaming da lì, kafka.api.OffsetRequest.LatestTime()
trasmetterà solo i nuovi messaggi.
Puoi anche trovare il codice di esempio per la gestione dell'offset presso il tuo consumatore.
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];
}