এটি এখনও সমর্থিত বলে মনে করবেন না। এই JIRA ইস্যুটি একবার দেখুন " বিষয়টিকে সমর্থন মুছুন"।
ম্যানুয়ালি মুছতে:
- গুচ্ছ বন্ধ
- ক্লাফ কাফকা লগ দির (
log.dir
কাফকা কনফিগারেশন ফাইলে অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা ) পাশাপাশি চিড়িয়াখানার ডেটা
- ক্লাস্টারটি পুনরায় চালু করুন
যে কোনও প্রদত্ত বিষয়ের জন্য আপনি যা করতে পারেন তা হ'ল
- কাফকা থামো
- পার্টিশনের জন্য সুনির্দিষ্ট কাফকা লগ, কাফকা তার লগ ফাইলটিকে "লগডির / টপিক-পার্টিশন" এর ফর্ম্যাটে সংরক্ষণ করে তাই "মাইটিপিক" নামের একটি বিষয়ের জন্য পার্টিশন আইডি 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
এছাড়াও, গ্রাহকরা পড়ার সাথে সাথে কী বার্তা মুছে ফেলা হবে?
থেকে কাফকা ডকুমেন্টেশন :
কাফকা ক্লাস্টার একটি কনফিগারযোগ্য সময়ের জন্য সমস্ত প্রকাশিত বার্তা - সেগুলি গ্রাস করা হয়েছে কিনা তা ধরে রাখে। উদাহরণস্বরূপ, যদি লগ ধরে রাখার জন্য দু'দিন সেট করা থাকে, তবে কোনও বার্তা প্রকাশের পরে দু'দিনের জন্য এটি ব্যবহারের জন্য পাওয়া যায়, তার পরে স্থান খালি করার জন্য এটি বাতিল করা হবে। কাফকার পারফরম্যান্স ডেটা আকারের ক্ষেত্রে কার্যকরভাবে ধ্রুবক তাই প্রচুর ডেটা ধরে রাখা কোনও সমস্যা নয়।
প্রকৃতপক্ষে প্রতি গ্রাহক ভিত্তিতে একমাত্র মেটাডেটা ধরে রাখা হয় লগের মধ্যে থাকা গ্রাহকের অবস্থান, যাকে "অফসেট" বলা হয়। এই অফসেটটি ভোক্তা দ্বারা নিয়ন্ত্রিত হয়: সাধারণত কোনও গ্রাহক বার্তা পাঠ করার সাথে সাথে তার অফসেটটি রৈখিকভাবে অগ্রসর করবে, তবে বাস্তবে অবস্থানটি গ্রাহক দ্বারা নিয়ন্ত্রিত হয় এবং এটি পছন্দমতো কোনও ক্রমে বার্তা গ্রহণ করতে পারে। উদাহরণস্বরূপ, কোনও গ্রাহক পুনরায় প্রসেস করতে পুরানো অফসেটে পুনরায় সেট করতে পারেন।
কাফকা ০.৮ সাধারণ গ্রাহক উদাহরণে পড়তে শুরু করার অফসেটটি সন্ধান করার জন্য তারা say
কাফকার সাহায্যের জন্য দু'টি ধ্রুবক অন্তর্ভুক্ত রয়েছে, 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];
}