Henüz desteklendiğini düşünmeyin. Bu JIRA sorununa bir göz atın "Konu silme desteği ekle".
Manuel olarak silmek için:
- Kümeyi kapatın
- Kafka günlük dizinini (
log.dir
kafka yapılandırma dosyasındaki öznitelikle belirtilir ) ve zookeeper verilerini temizleyin
- Kümeyi yeniden başlatın
Herhangi bir konu için yapabilecekleriniz
- Dur kafka
- Bölüme özgü temiz kafka günlüğü, kafka günlük dosyasını "logDir / topic-partition" biçiminde saklar, bu nedenle "MyTopic" adlı bir konu için, bölüm kimliği 0 için günlük , öznitelik tarafından belirtildiği
/tmp/kafka-logs/MyTopic-0
yerde depolanır./tmp/kafka-logs
log.dir
- Kafka'yı yeniden başlatın
Bu NOT
iyi ve önerilen bir yaklaşım ama işe yaramalı. Kafka komisyoncu yapılandırma dosyasında log.retention.hours.per.topic
öznitelik,The number of hours to keep a log file before deleting it for some specific topic
Ayrıca, tüketici okur okur okumaz mesajların silinmesinin bir yolu var mı?
Gönderen Kafka Belgeler :
Kafka kümesi, tüketilmiş olsun veya olmasın, yayınlanan tüm iletileri yapılandırılabilir bir süre boyunca tutar. Örneğin, günlük saklama süresi iki gün olarak ayarlanmışsa, bir mesaj yayınlandıktan sonraki iki gün boyunca tüketime hazır olur ve ardından yer açmak için silinir. Kafka'nın performansı veri boyutuna göre etkin bir şekilde sabittir, bu nedenle çok sayıda veriyi tutmak bir sorun değildir.
Aslında, tüketici bazında tutulan tek meta veri, tüketicinin günlükteki "ofset" adı verilen konumudur. Bu dengeleme, tüketici tarafından kontrol edilir: normalde bir tüketici, mesajlarını okurken ofsetini doğrusal olarak ilerletir, ancak aslında konum tüketici tarafından kontrol edilir ve mesajları istediği sırayla tüketebilir. Örneğin, bir tüketici yeniden işlemek için daha eski bir ofsete sıfırlayabilir.
Kafka 0.8 Basit Tüketici örneğinde okunacak başlangıç ofsetini bulmak için şöyle derler:
Kafka yardımcı olacak iki sabit içerir kafka.api.OffsetRequest.EarliestTime()
, günlüklerdeki verilerin başlangıcını bulur ve oradan akışa başlar kafka.api.OffsetRequest.LatestTime()
, yalnızca yeni mesajlar yayınlar.
Tüketici tarafınızdaki ofseti yönetmek için örnek kodu burada da bulabilirsiniz.
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];
}