लगता है कि यह अभी तक समर्थित नहीं है। इस JIRA मुद्दे पर एक नज़र डालें "हटाएं विषय समर्थन जोड़ें"।
मैन्युअल रूप से हटाने के लिए:
- क्लस्टर बंद
- क्लीन काफ्का लॉग डीआईआर (
log.dir
काफ्का कॉन्फिग फ़ाइल में विशेषता द्वारा निर्दिष्ट ) और साथ ही ज़ूकीपर डेटा
- क्लस्टर को पुनरारंभ करें
किसी भी विषय के लिए आप क्या कर सकते हैं
- कफका बंद करो
- विभाजन के लिए विशिष्ट स्वच्छ कफ़्का लॉग, काफ़्का अपनी लॉग फ़ाइल को "logDir / विषय-विभाजन" के प्रारूप में संग्रहीत करता है, इसलिए "MyTopic" नाम के एक विषय के लिए विभाजन आईडी 0 के लिए लॉग को उस स्थान पर संग्रहीत किया जाएगा
/tmp/kafka-logs/MyTopic-0
जहां विशेषता /tmp/kafka-logs
द्वारा निर्दिष्ट किया गया log.dir
है
- काफ्का को फिर से शुरू करें
यह NOT
एक अच्छा और अनुशंसित दृष्टिकोण है लेकिन इसे काम करना चाहिए। काफ्का ब्रोकर कॉन्फिगर फाइल में log.retention.hours.per.topic
परिभाषित करने के लिए विशेषता का उपयोग किया जाता हैThe number of hours to keep a log file before deleting it for some specific topic
इसके अलावा, क्या उपभोक्ता द्वारा इसे पढ़ते ही संदेश डिलीट हो जाता है?
से काफ्का प्रलेखन :
काफ्का क्लस्टर सभी प्रकाशित संदेशों को बरकरार रखता है - भले ही उनका उपभोग किया गया हो या नहीं - एक विन्यास योग्य समय के लिए। उदाहरण के लिए यदि लॉग रिटेंशन दो दिनों के लिए सेट है, तो एक संदेश प्रकाशित होने के बाद दो दिनों के लिए यह उपभोग के लिए उपलब्ध है, जिसके बाद इसे खाली स्थान को छोड़ दिया जाएगा। कफ़्का का प्रदर्शन डेटा आकार के संबंध में प्रभावी रूप से स्थिर है, इसलिए बहुत सारे डेटा को बनाए रखना कोई समस्या नहीं है।
वास्तव में प्रति-उपभोक्ता आधार पर बनाए गए एकमात्र मेटाडेटा लॉग में उपभोक्ता की स्थिति है, जिसे "ऑफसेट" कहा जाता है। इस ऑफसेट को उपभोक्ता द्वारा नियंत्रित किया जाता है: आम तौर पर एक उपभोक्ता अपने ऑफसेट को अग्रिम रूप से अग्रिम करेगा क्योंकि यह संदेश पढ़ता है, लेकिन वास्तव में स्थिति उपभोक्ता द्वारा नियंत्रित होती है और यह किसी भी क्रम में संदेशों को पसंद कर सकता है। उदाहरण के लिए एक उपभोक्ता पुनरावृत्ति के लिए एक पुराने ऑफसेट को रीसेट कर सकता है।
काफ्का 0.8 सरल उपभोक्ता उदाहरण में पढ़ने के लिए स्टार्ट ऑफ़सेट पढ़ने के लिए वे कहते हैं
काफ्का में मदद करने के लिए दो स्थिरांक शामिल हैं, kafka.api.OffsetRequest.EarliestTime()
लॉग में डेटा की शुरुआत का पता लगाता है और वहां से स्ट्रीमिंग शुरू करता है, kafka.api.OffsetRequest.LatestTime()
केवल नए संदेशों को स्ट्रीम करेगा।
आप अपने उपभोक्ता के अंत में ऑफ़सेट के प्रबंधन के लिए वहां उदाहरण कोड भी पा सकते हैं।
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];
}