কাফকা টপিক পার্জ করুন


184

কাফকার মধ্যে বিষয় মুছে ফেলার কোনও উপায় আছে কি?

আমি আমার লোকাল মেশিনে কাফকা বার্তা প্রসঙ্গে একটি বার্তা চাপলাম, এখন আমি একটি ত্রুটি পাচ্ছি:

kafka.common.InvalidMessageSizeException: invalid message size

এখানে বৃদ্ধি করা fetch.sizeআদর্শ নয়, কারণ আমি আসলে বড় বার্তা গ্রহণ করতে চাই না।

উত্তর:


359

সাময়িকভাবে বিষয়টিতে ধরে রাখার সময়টিকে এক সেকেন্ডে আপডেট করুন:

kafka-topics.sh --zookeeper <zkhost>:2181 --alter --topic <topic name> --config retention.ms=1000

এবং নতুন কাফকা প্রকাশে, আপনি এটি দিয়েও করতে পারেন kafka-configs --entity-type topics

kafka-configs.sh --zookeeper <zkhost>:2181 --entity-type topics --alter --entity-name <topic name> --add-config retention.ms=1000

তারপরে শুদ্ধি কার্যকর হওয়ার জন্য অপেক্ষা করুন (প্রায় এক মিনিট)। একবার শুদ্ধ হয়ে গেলে পূর্বের retention.msমানটি পুনরুদ্ধার করুন ।


8
এটি একটি দুর্দান্ত উত্তর তবে আপনি দয়া করে কোনও বিষয় যুক্ত করতে পারেন যে কীভাবে টপিকের বর্তমান রিটেনশন.এমএস মান পরীক্ষা করে শুরু করবেন?
গ্রেগ দুবিকি

28
আমি বর্তমান কনফিগারেশনটি যাচাই করার বিষয়ে নিশ্চিত নই, তবে আমি বিশ্বাস করি এটি ডিফল্টরূপে পুনরায় সেট করা দেখে মনে হচ্ছে:bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic MyTopic --deleteConfig retention.ms
aspergillusOryzae

15
বা সংস্করণের উপর নির্ভর করে:--delete-config retention.ms
aspergillusOryzae

3
কাফকা বনাম ০.৯.০.০. এর জন্য কেবল একটি ফাই, এটি বলে: উবুন্টু @ আইপি -172-31-21-201: /opt/kafka/kafka_2.10-0.9.0.0-SNAPSHOT$ বিন / কাফকা- টপিক্স.শ - -জুকিকার লোকালহোস্ট: 2181 - ওল্টার - টপিক রুম-ডেটা - কনফিগ রিটেনশন.এমএস = 1000 সতর্কতা: এই স্ক্রিপ্ট থেকে পরিবর্তিত হওয়া বিষয়বস্তু কনফিগারেশন অবচিত করা হয়েছে এবং ভবিষ্যতে প্রকাশিত ক্ষেত্রে মুছে ফেলা হতে পারে। এগিয়ে যেতে, দয়া করে এই কার্যকারিতা জন্য kafka-configs.sh ব্যবহার করুন
Alper Akture

54
০.৯.০ থেকে মনে হচ্ছে, কনফিগারটি পরিবর্তন করতে kafka-topics.sh ব্যবহার করে অবচিত করা হয়েছে। নতুন বিকল্পটি হল kafka-configs.sh স্ক্রিপ্টটি ব্যবহার করা। e.g. kafka-configs.sh --zookeeper <zkhost>:2181 --alter --entity-type topics --entity-name <topic name> --add-config retention.ms=1000 এটি আপনাকে বর্তমান ধরে রাখার সময়কালের জন্য যেমন: কাফকা-কনফিগার্স --zooaker <zkhost>: 2181 - বর্ণনামূলক - ধরণের ধরণের বিষয়সমূহ - নাম-নাম <বিষয় নাম>
আরএইচই

69

সারিটি সাফ করার জন্য আপনি বিষয়টি মুছতে পারেন:

bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test

তারপরে এটিকে পুনরায় তৈরি করুন:

bin/kafka-topics.sh --create --zookeeper localhost:2181 \
    --replication-factor 1 --partitions 1 --topic test

14
delete.topic.enable=trueফাইলটিতে লাইন যুক্ত করার কথা মনে রাখবেন config/server.properties, যেমন উল্লিখিত কমান্ড দ্বারা মুদ্রিত সতর্কতাটি বলেছেNote: This will have no impact if delete.topic.enable is not set to true.
প্যাট্রিজিও বার্তোনি

3
এটি সর্বদা তাত্ক্ষণিক নয়। কখনও কখনও এটি মুছে ফেলার জন্য চিহ্নিত করে এবং প্রকৃত মুছে ফেলাটি পরে ঘটবে।
গৌরব খারে

48

নামের একটি বিষয় মুছে ফেলার জন্য আমি অনুসরণ করা পদক্ষেপগুলি এখানে MyTopic:

  1. বিষয়টি বর্ণনা করুন, এবং ব্রোকার আইডিগুলি গ্রহণ করবেন না
  2. তালিকাভুক্ত প্রতিটি ব্রোকার আইডির জন্য অ্যাপাচি কাফকা ডেমন থামান।
  3. প্রতিটি ব্রোকারের সাথে সংযুক্ত হন, এবং বিষয়টির ডেটা ফোল্ডার মুছুন, যেমন rm -rf /tmp/kafka-logs/MyTopic-0। অন্যান্য পার্টিশন এবং সমস্ত প্রতিলিপিগুলির জন্য পুনরাবৃত্তি করুন
  4. বিষয় মেটাডেটা মুছুন: zkCli.shতারপরেrmr /brokers/MyTopic
  5. প্রতিটি থামানো মেশিনের জন্য অ্যাপাচি কাফকা ডেমন শুরু করুন

যদি আপনি 3 য় পদক্ষেপ মিস করেন তবে অ্যাপাচি কাফকা এই বিষয়টিকে বর্তমান হিসাবে প্রতিবেদন করতে থাকবে (উদাহরণস্বরূপ আপনি যখন চালান kafka-list-topic.sh)।

অ্যাপাচি কাফকা ০.৮.০ এর সাথে পরীক্ষিত।


2
0.8.1 এ ./zookeeper-shell.sh localhost:2181এবং./kafka-topics.sh --list --zookeeper localhost:2181
pdeschen

(ক্লৌডের সিডিএইচ 5 তে চেষ্টা করা) zookeeper-clientএর পরিবর্তে ব্যবহার করতে পারেনzkCli.sh
মার্টিন টেপ

1
এটি বিষয়টির মুছবে, এর ভিতরে থাকা ডেটা নয়। এটি ব্রোকারকে বন্ধ করা দরকার। এটি সেরা একটি হ্যাক। স্টিভেন অ্যাপ্লিয়ার্ডের উত্তরটি সত্যই পরম সেরা।
জেফ মাশ

1
এটি লেখার সময় এটি ছিল একমাত্র উপায়।
থমাস ব্র্যাট

2
কাফকা 0.8.2.1 উপর আমার জন্য কাজ, যদিও zookeeper মধ্যে topis <বিষয় এখানে নাম> / দালাল / বিষয় / তলায় ছিলে
codecraig

43

গৃহীত উত্তরটি সঠিক হলেও সেই পদ্ধতিটি অবমূল্যায়ন করা হয়েছে। বিষয় কনফিগারেশন এখন মাধ্যমে করা উচিত kafka-configs

kafka-configs --zookeeper localhost:2181 --entity-type topics --alter --add-config retention.ms=1000 --entity-name MyTopic

এই পদ্ধতির মাধ্যমে সেট করা কনফিগারেশন কমান্ডের সাহায্যে প্রদর্শিত হতে পারে

kafka-configs --zookeeper localhost:2181 --entity-type topics --describe --entity-name MyTopic

2
এটি যোগ করার মতো মূল্যও রয়েছে:kafka-configs --zookeeper localhost:2181 --entity-type topics --alter --delete-config retention.ms --entity-name MyTopic
NoBrainer

38

দ্রুত-সূচনা উদাহরণের জন্য কাফকার ০.৮.২-তে পরীক্ষা করা হয়েছে: প্রথমে কনফিগার ফোল্ডারের অধীনে সার্ভারে একটি লাইন যুক্ত করুন rop

delete.topic.enable=true

তারপরে, আপনি এই আদেশটি চালাতে পারেন:

bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test

6

কাফকা থেকে ২.১

একটি বিষয় সাফ করুন

bin/kafka-configs.sh --zookeeper localhost:2181 --alter --entity-type topics --entity-name tp_binance_kline --add-config retention.ms=100

1 মিনিট অপেক্ষা করুন, নিরাপদ থাকতে কাফকা বিষয়টি মুছে ফেলুন বিষয়টি কনফিগারেশনটি সরান, এবং তারপরে ডিফল্ট মানটিতে যান

bin/kafka-configs.sh --zookeeper localhost:2181 --alter --entity-type topics --entity-name tp_binance_kline --delete-config retention.ms

1
আমার মনে হয় আপনার একটি অতিরিক্ত তীর রয়েছে। আমার উপর, আমি দৌড়াতে সক্ষম হয়েছিলামbin/kafka-configs.sh --zookeeper localhost:2181 --alter --entity-type topics --entity-name my-topic --add-config rentention.ms=100
উইল

4

কাফকার কাছে পরিষ্কার / ক্লিন-আপ টপিক (কুইউস) এর জন্য সরাসরি পদ্ধতি নেই তবে এটি বিষয় মুছে ফেলা এবং এটি পুনরায় তৈরি করার মাধ্যমে এটি করতে পারে।

প্রথমে নিশ্চিত করুন যে sever.properties ফাইল রয়েছে এবং না যুক্ত রয়েছে delete.topic.enable=true

তারপরে, বিষয় মুছুন bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic myTopic

তারপরে এটি আবার তৈরি করুন।

bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic myTopic --partitions 10 --replication-factor 2

4

কখনও কখনও, যদি আপনি একটি স্যাচুরেটেড ক্লাস্টার (অনেকগুলি পার্টিশন, বা এনক্রিপ্টড টপিক ডেটা ব্যবহার করে, বা এসএসএল ব্যবহার করে বা নিয়ন্ত্রণকারীটি খারাপ নোডে থাকে বা সংযোগটি ফাঁকা থাকে) তবে বলা বিষয়টিকে সাফ করতে অনেক সময় লাগবে ।

আমি এই পদক্ষেপগুলি অনুসরণ করি, বিশেষত যদি আপনি অভ্র ব্যবহার করেন।

1: কাফকা সরঞ্জাম দিয়ে চালান:

bash kafka-configs.sh --alter --entity-type topics --zookeeper zookeeper01.kafka.com --add-config retention.ms=1 --entity-name <topic-name>

2: স্কিমা রেজিস্ট্রি নোডে চালান:

kafka-avro-console-consumer --consumer-property security.protocol=SSL --consumer-property ssl.truststore.location=/etc/schema-registry/secrets/trust.jks --consumer-property ssl.truststore.password=password --consumer-property ssl.keystore.location=/etc/schema-registry/secrets/identity.jks --consumer-property ssl.keystore.password=password --consumer-property ssl.key.password=password --bootstrap-server broker01.kafka.com:9092 --topic <topic-name> --new-consumer --from-beginning

3: একবার বিষয় ফাঁকা থাকলে বিষয়টিকে ধরে রাখার মূল সেটিংয়ে সেট করুন।

bash kafka-configs.sh --alter --entity-type topics --zookeeper zookeeper01.kafka.com --add-config retention.ms=604800000 --entity-name <topic-name>

আশা করি এটি কাউকে সহায়তা করবে, কারণ এটি সহজে বিজ্ঞাপন দেওয়া হয় না।


দ্রষ্টব্য: kafka-avro-console-consumerপ্রয়োজনীয় নয়
ওয়ানডে ক্রিকেটার ২ '

4

আপডেট: এই উত্তর কাফকার 0.6 এর জন্য প্রাসঙ্গিক। কাফকার ০.৮ এর জন্য এবং পরে @ পেট্রিকের উত্তর দেখুন।

হ্যাঁ, কাফকা বন্ধ করুন এবং সংশ্লিষ্ট সাব-ডিরেক্টরি থেকে সমস্ত ফাইল ম্যানুয়ালি মুছুন (এটি কাফকার ডেটা ডিরেক্টরিতে সন্ধান করা সহজ)। কাফকা পুনঃসূচনা করার পরে বিষয়টি খালি থাকবে।


এর জন্য ব্রোকারকে নামিয়ে আনতে হবে এবং এটি সর্বোত্তম হ্যাক। স্টিভেন অ্যাপ্লিয়ার্ডের উত্তরটি সত্যই পরম সেরা।
জেফ মাশ

@ MaasSql আমি সম্মত :) এই উত্তরটি দুই বছরের পুরানো, সংস্করণ 0.6 এর সম্পর্কে। "পরিবর্তিত বিষয়" এবং "বিষয় মুছুন" কার্যকারিতা পরে প্রয়োগ করা হয়েছে।
ওয়াইল্ডফায়ার

স্টিভেন অ্যাপ্লিয়ার্ডের উত্তরটি ঠিক এর মতোই হ্যাকি।
বানজোক্যাট

একটি অ্যাপ্লিকেশন হ্যান্ডেল একটি সমর্থিত উপায়ে তার নিজস্ব ডেটা মুছে ফেলা বলেছে অ্যাপ্লিকেশনটি বন্ধ করে দেওয়া এবং আপনি যা ভাবেন তার সমস্ত ডেটা ফাইল মুছে ফেলার পরে এটি আবার চালু করার চেয়ে কম হ্যাকি।
নিক

3

সবচেয়ে সহজ পদ্ধতিকে হ'ল পৃথক লগ ফাইলগুলির তারিখটি ধরে রাখার সময়কালের চেয়ে পুরানো হতে হবে। তারপরে ব্রোকারটি এগুলি পরিষ্কার করে কয়েক সেকেন্ডের মধ্যে আপনার জন্য সরিয়ে ফেলা উচিত। এটি বিভিন্ন সুবিধা দেয়:

  1. ব্রোকারদের নামানোর দরকার নেই, এটি রানটাইম অপারেশন।
  2. অবৈধ অফসেট ব্যতিক্রমগুলির সম্ভাবনা এড়ানো (নীচে তার আরও বেশি)।

কাফকার ০.7.x এর সাথে আমার অভিজ্ঞতায় লগ ফাইলগুলি সরিয়ে এবং ব্রোকারটি পুনরায় চালু করা নির্দিষ্ট গ্রাহকদের অবৈধ অফসেট ব্যতিক্রম হতে পারে। এটি ঘটবে কারণ ব্রোকার অফসেটগুলি শূন্যে পুনঃসূচনা করে (কোনও বিদ্যমান লগ ফাইলের অভাবে) এবং ব্যবহারকারী যে বিষয় আগে গ্রাহক হয়েছিলেন তা নির্দিষ্ট [একবার বৈধ] অফসেটের জন্য পুনরায় সংযোগ করবে। যদি এই অফসেটটি নতুন টপিক লগের সীমার বাইরে পড়ে যায় তবে কোনও ক্ষতি হবে না এবং গ্রাহক শুরুতে বা শেষের দিকে শুরু করুন। তবে, যদি অফসেটটি নতুন টপিক লগের সীমানার মধ্যে পড়ে তবে ব্রোকার বার্তাটি সেট আনার চেষ্টা করে তবে ব্যর্থ হয় কারণ অফসেটটি কোনও প্রকৃত বার্তায় সরে যায় না।

এই বিষয়টির জন্য চিড়িয়াখানায় থাকা গ্রাহক অফসেট সাফ করেও এটি প্রশমিত করা যেতে পারে। তবে যদি আপনার কোনও ভার্জিন বিষয়ের প্রয়োজন হয় না এবং কেবল বিদ্যমান সামগ্রীগুলি সরাতে চান, তবে ব্রোকারদের থামানো, টপিক লগগুলি মুছে ফেলা এবং নির্দিষ্ট চিড়িয়াখানার নোডগুলি সাফ করার চেয়ে কয়েকটি বিষয় লগকে 'স্পর্শ' করা সহজতর এবং আরও নির্ভরযোগ্য is ।


কীভাবে "স্বীকৃতি সময়কালের চেয়ে পৃথক লগ ফাইলগুলির তারিখ সেট করা যায়"? ধন্যবাদ
bylijinnan

3

থমাসের পরামর্শ দুর্দান্ত তবে দুর্ভাগ্যক্রমে zkCliচিড়িয়াখানার পুরানো সংস্করণগুলিতে (উদাহরণস্বরূপ 3.3.6) সমর্থন করছে বলে মনে হয় না rmr। উদাহরণস্বরূপ, আধুনিক চিড়িয়াখানায় কমান্ড লাইন প্রয়োগের সংস্করণ 3.3 এর সাথে তুলনা করুন ।

আপনি যদি চিড়িয়াখানার পুরানো সংস্করণের মুখোমুখি হন তবে একটি সমাধান হল পাইথনের জন্য ক্লায়েন্ট লাইব্রেরি যেমন zc.zk ব্যবহার করা। পাইথনের সাথে পরিচিত না এমন লোকদের জন্য আপনাকে এটি পিপ বা ইজি_ইনস্টল ব্যবহার করে ইনস্টল করতে হবে । তারপরে একটি পাইথন শেল ( python) শুরু করুন এবং আপনি এটি করতে পারেন:

import zc.zk
zk = zc.zk.ZooKeeper('localhost:2181')
zk.delete_recursive('brokers/MyTopic') 

অথবা এমনকি

zk.delete_recursive('brokers')

আপনি যদি কাফকা থেকে সমস্ত বিষয় মুছে ফেলতে চান।


2

আপনার অ্যাপ্লিকেশন গ্রুপটি ব্যবহার করে কোনও নির্দিষ্ট বিষয় থেকে সমস্ত বার্তা পরিষ্কার করার জন্য (গ্রুপ নাম অ্যাপ্লিকেশন কাফকা গ্রুপের নামের মতো হওয়া উচিত)।

./kafka-path/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic topicName --from-beginning --group application-group


এই পদ্ধতির সাথে সমস্যা আছে (0.8.1.1 এ পরীক্ষা করা হয়েছে)। যদি কোনও অ্যাপ্লিকেশন দুটি (বা ততোধিক) বিষয়ে সাবস্ক্রাইব করে: টপটিক 1 এবং টোপটি 2 এবং কনসোল গ্রাহক প্রসঙ্গ 1 মুছে ফেলেন, দুর্ভাগ্যক্রমে এটি টপিক 2 এর সাথে সম্পর্কিত সম্পর্কযুক্ত গ্রাহক অফসেট মুছে দেয়, যা টপিক 2 থেকে সমস্ত বার্তাগুলির পুনঃপ্লে এর কারণ করে।
jsh

2

স্টিভেন অ্যাপ্লায়ার্ড উত্তর অনুসরণ করে আমি কাফকা ২.২.০-তে নিম্নলিখিত কমান্ডগুলি কার্যকর করেছি এবং তারা আমার পক্ষে কাজ করেছে।

bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name <topic-name> --describe

bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name <topic-name> --alter --add-config retention.ms=1000

bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name <topic-name> --alter --delete-config retention.ms

এটি অন্যান্য উত্তরগুলির সদৃশ বলে মনে হচ্ছে
ওয়ানডে ক্রিকেটার

2

এখানে অনেক দুর্দান্ত উত্তর কিন্তু তাদের মধ্যে, আমি ডকার সম্পর্কে একটিও পাইনি। আমি কিছু সময় ব্যয় করতে পেরেছি যে ব্রোকারের ধারকটি ব্যবহার করা এই ক্ষেত্রে ভুল (স্পষ্টতই !!!)

## this is wrong!
docker exec broker1 kafka-topics --zookeeper localhost:2181 --alter --topic mytopic --config retention.ms=1000
Exception in thread "main" kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING
        at kafka.zookeeper.ZooKeeperClient.$anonfun$waitUntilConnected$3(ZooKeeperClient.scala:258)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
        at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:253)
        at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:254)
        at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:112)
        at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1826)
        at kafka.admin.TopicCommand$ZookeeperTopicService$.apply(TopicCommand.scala:280)
        at kafka.admin.TopicCommand$.main(TopicCommand.scala:53)
        at kafka.admin.TopicCommand.main(TopicCommand.scala)

এবং আমার রচনা ফাইলের zookeeper:2181পরিবর্তে --zookeeper localhost:2181আমার ব্যবহার করা উচিত ছিল

## this might be an option, but as per comment below not all zookeeper images can have this script included
docker exec zookeper1 kafka-topics --zookeeper localhost:2181 --alter --topic mytopic --config retention.ms=1000

সঠিক আদেশ হবে

docker exec broker1 kafka-configs --zookeeper zookeeper:2181 --alter --entity-type topics --entity-name dev_gdn_urls --add-config retention.ms=12800000

আশা করি এটি কারও সময় সাশ্রয় করবে।

এছাড়াও, সচেতন থাকুন যে বার্তাগুলি অবিলম্বে মোছা হবে না এবং লগের অংশটি বন্ধ হয়ে গেলে এটি ঘটবে।


আপনি ব্রোকারের মধ্যে ঠিক জরিমানা করতে পারেন। সমস্যাটি হ'ল localhost:2181... উদাহরণস্বরূপ আপনি ডকার নেটওয়ার্কিং বৈশিষ্ট্যগুলিকে ভুল বুঝছেন। এছাড়াও, সমস্ত চিড়িয়াখানার পাত্রে নেই kafka-topics, তাই এটি সেভাবে ব্যবহার না করা ভাল। সর্বশেষ কাফকা ইনস্টলেশনগুলির --bootstrap-serversপরিবর্তে একটি বিষয় পরিবর্তনের জন্য অনুমতি দেওয়া হয়েছে--zookeeper
ওয়ানডে ক্রিকেটার

1
তবুও, চিড়িয়াখানার কন্টেইনারে এক্সিকিউট করা ভুল বলে মনে হচ্ছে। you can use --জুকিপার চিড়িয়াখানা: কাফকার ধারক থেকে 2181` আমার বক্তব্য। অথবা সার্ভার.জুড়ে থাকা ফাইল থেকে চিড়িয়াখানার লাইনটি গ্রেপ করেও করুন
ওয়ান ক্রিকেটার 13

@ ক্রিকেট_০০7 আরে, এর জন্য ধন্যবাদ, আমি উত্তরটি সংশোধন করেছিলাম, সেখানে এখনও কিছু ভুল আছে কিনা তা আমাকে জানান
ভ্লাদিমির সেমাশকিন

1

আকারের কারণে মন্তব্য হিসাবে যুক্ত করা যায়নি: রিটেনশন.এমএস এবং রিটেনশন.বিটস আপডেট করার পাশাপাশি এটি সত্য কিনা তা নিশ্চিত নই, তবে আমি লক্ষ্য করেছি যে বিষয়টিকে পরিষ্কার করার নীতিটি "মোছা" (ডিফল্ট) হওয়া উচিত, যদি "কমপ্যাক্ট" হয়, এটি যাচ্ছে বার্তা ধরে রাখুন, অর্থাত্ যদি এটি "কমপ্যাক্ট" হয় তবে আপনাকে মুছে ফেলা উচিত re

./bin/kafka-configs.sh --zookeeper localhost:2181 --describe --entity-name test-topic-3-100 --entity-type topics
Configs for topics:test-topic-3-100 are retention.ms=1000,delete.retention.ms=10000,cleanup.policy=delete,retention.bytes=1

এটি সফলভাবে হয়েছে তা নিশ্চিত করার জন্য প্রথম / সর্বশেষতম অফসেটগুলি একই রকম হওয়া উচিত, ডু-এইচ / টিএমপি / কাফকা-লগস / পরীক্ষা-বিষয় -3-100- * পরীক্ষা করতে পারেন

./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list "BROKER:9095" --topic test-topic-3-100 --time -1 | awk -F ":" '{sum += $3} END {print sum}' 26599762

./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list "BROKER:9095" --topic test-topic-3-100 --time -2 | awk -F ":" '{sum += $3} END {print sum}' 26599762

অন্য সমস্যাটি হ'ল, আপনাকে প্রথমে কারেন্ট কনফিগার করতে হবে যাতে মুছে ফেলা সাফল্যের পরে ফিরে যাওয়ার কথা মনে পড়ে: ./bin/kafka-configs.sh --zookeeper localhost:2181 --describe --entity-name test-topic-3-100 --entity-type topics


1

আর একটি, বরং ম্যানুয়াল, একটি বিষয় শুদ্ধ করার জন্য পদ্ধতি:

দালালদের মধ্যে:

  1. কাফকা ব্রোকার বন্ধ করুন
    sudo service kafka stop
  2. সমস্ত পার্টিশন লগ ফাইল মুছুন (সমস্ত ব্রোকারের উপর করা উচিত)
    sudo rm -R /kafka-storage/kafka-logs/<some_topic_name>-*

চিড়িয়াখানায়:

  1. চিড়িয়াখানা কমান্ড লাইন ইন্টারফেস চালান
    sudo /usr/lib/zookeeper/bin/zkCli.sh
  2. বিষয় মেটাডেটা অপসারণ করতে zkCli ব্যবহার করুন
    rmr /brokers/topic/<some_topic_name>

আবার দালালদের মধ্যে:

  1. ব্রোকার পরিষেবা পুনরায় চালু করুন
    sudo service kafka start

প্রতিলিপি সহ আপনাকে প্রতিটি ব্রোকারের থেকে ফাইলগুলি থামানো এবং মুছে ফেলা দরকার, যার অর্থ এটি করার সময় আপনি ক্লায়েন্ট ডাউনটাইম পেতে পারেন
ওয়ান ক্রিকেটার 2

1
আপনি সঠিক, এটি কেবল আপনাকে কাফকা দ্বারা কিছু জিনিস কোথায় সংরক্ষণ এবং পরিচালিত হয় তা দেখতে দেয়। তবে এই বর্বর শক্তি পদ্ধতির অবশ্যই উত্পাদন চলমান সিস্টেমের জন্য নয়।
ড্যানি মোড়

1
./kafka-topics.sh --describe --zookeeper zkHost:2181 --topic myTopic

এটি retention.msকনফিগার করা উচিত । তারপরে আপনি উপরের অল্টার কমান্ডটি 1 সেকেন্ডে পরিবর্তন করতে পারেন (এবং পরে ডিফল্টে ফিরে যেতে পারেন)।

Topic:myTopic   PartitionCount:6        ReplicationFactor:1     Configs:retention.ms=86400000

1

জাভা থেকে, AdminZkClientহ্রাসের পরিবর্তে নতুন ব্যবহার করুন AdminUtils:

  public void reset() {
    try (KafkaZkClient zkClient = KafkaZkClient.apply("localhost:2181", false, 200_000,
        5000, 10, Time.SYSTEM, "metricGroup", "metricType")) {

      for (Map.Entry<String, List<PartitionInfo>> entry : listTopics().entrySet()) {
        deleteTopic(entry.getKey(), zkClient);
      }
    }
  }

  private void deleteTopic(String topic, KafkaZkClient zkClient) {

    // skip Kafka internal topic
    if (topic.startsWith("__")) {
      return;
    }

    System.out.println("Resetting Topic: " + topic);
    AdminZkClient adminZkClient = new AdminZkClient(zkClient);
    adminZkClient.deleteTopic(topic);

    // deletions are not instantaneous
    boolean success = false;
    int maxMs = 5_000;
    while (maxMs > 0 && !success) {
      try {
        maxMs -= 100;
        adminZkClient.createTopic(topic, 1, 1, new Properties(), null);
        success = true;
      } catch (TopicExistsException ignored) {
      }
    }

    if (!success) {
      Assert.fail("failed to create " + topic);
    }
  }

  private Map<String, List<PartitionInfo>> listTopics() {
    Properties props = new Properties();
    props.put("bootstrap.servers", kafkaContainer.getBootstrapServers());
    props.put("group.id", "test-container-consumer-group");
    props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

    KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
    Map<String, List<PartitionInfo>> topics = consumer.listTopics();
    consumer.close();

    return topics;
  }

আপনার চিড়িয়াখানার দরকার নেই। ব্যবহার করুন AdminClientবাKafkaAdminClient
ওয়ানডে ক্রিকেটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.