पुरगे काफ्का टॉपिक


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
काफ़्का बनाम। 0.9.0.0 के लिए बस एक फी, यह कहता है: ubuntu @ ip-172-31-21-201: /opt/kafka/kafka_2.10-0.9.0.0-SNAPSHOT$ बिन / काफ़्का-topics.sh - -zookeeper localhost: 2181 --alter --topic room-data --config retention.ms = 1000 चेतावनी: इस स्क्रिप्ट से अलर्ट विषय विन्यास को हटा दिया गया है और भविष्य के रिलीज में हटाया जा सकता है। आगे जा रहे हैं, कृपया इस कार्यशीलता के लिए kafka-configs.sh का उपयोग करें
Alper Akure

54
यह 0.9.0 के बाद से लगता है, विन्यास को बदलने के लिए 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 यह आपको वर्तमान अवधारण अवधि की जांच करने की भी अनुमति देता है, उदाहरण के लिए kafka-configs --zookeeper <zkhost>: 2181 -describe --entity-type विषय --entity-name <विषय का नाम>
RHE

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.
Patrizio Bertoni

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)।

अपाचे काफ्का 0.8.0 के साथ परीक्षण किया गया।


2
0.8.1 में ./zookeeper-shell.sh localhost:2181और./kafka-topics.sh --list --zookeeper localhost:2181
pdeschen

के zookeeper-clientबजाय का उपयोग कर सकते हैं zkCli.sh(Cloudera CDH5 पर कोशिश की गई)
मार्टिन टैप

1
यह विषय को हटाता है, इसके अंदर के डेटा को नहीं। इसके लिए आवश्यक है कि ब्रोकर को रोका जाए। यह सबसे अच्छा एक हैक है। स्टीवन एपलीयार्ड का जवाब वास्तव में सबसे अच्छा है।
जेफ मास

1
जिस समय यह लिखा गया था, यही एकमात्र तरीका था।
थॉमस ब्रैट

2
कफका 0.8.2.1 पर मेरे लिए काम किया, हालांकि ज़ूकीपर में टॉपिस के तहत / दलालों / विषयों / <विषय का नाम यहां था>
कोडेक्रे

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

त्वरित प्रारंभ उदाहरण के लिए काफ्का 0.8.2 में परीक्षण किया गया: सबसे पहले, विन्यास फ़ोल्डर के तहत सर्वर.प्रॉपर्टी फ़ाइल में एक पंक्ति जोड़ें:

delete.topic.enable=true

फिर, आप इस कमांड को चला सकते हैं:

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

6

काफ्का से 1.1

किसी विषय को शुद्ध करना

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

कफका में पर्ज / क्लीन-अप विषय (क्यू) के लिए प्रत्यक्ष विधि नहीं है, लेकिन यह उस विषय को हटाने और इसे पुनः बनाने के माध्यम से कर सकता है।

सुनिश्चित करें कि सबसे पहले। फ़ाइल को जोड़ने और नहीं होने पर 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आवश्यक नहीं है
OneCricketeer

4

अद्यतन: यह उत्तर कफका 0.6 के लिए प्रासंगिक है। काफ्का 0.8 के लिए और बाद में @ पैट्रिक द्वारा उत्तर देखें।

हां, कफका बंद करो और मैन्युअल रूप से संबंधित उपनिर्देशिका से सभी फ़ाइलों को हटा दें (इसे काफ्का डेटा निर्देशिका में खोजना आसान है)। कफका पुनरारंभ के बाद विषय खाली हो जाएगा।


इसके लिए ब्रोकर को नीचे लाने की आवश्यकता है, और यह सबसे अच्छा हैक है। स्टीवन एपलीयार्ड का जवाब वास्तव में सबसे अच्छा है।
जेफ मास

@MaasSql मैं सहमत हूँ। :) यह उत्तर दो साल पुराना है, संस्करण 0.6 के बारे में। "परिवर्तन विषय" और "विषय हटाएं" कार्यक्षमता को बाद में लागू किया गया है।
वाइल्डफायर

स्टीवन एपलीयार्ड का जवाब सिर्फ इतना ही हैकी है।
बंजोकट

एक समर्थित तरीके से अपने स्वयं के डेटा को हटाने के लिए एक एप्लिकेशन हैंडल होने से, कहा गया है कि आवेदन को बंद करने और जो आप सोचते हैं कि उसकी सभी डेटा फाइलें हैं, उसे फिर से चालू करने की तुलना में बहुत कम है।
निक

3

सबसे सरल तरीका यह है कि रिटेंशन पीरियड की तुलना में पुराना होने के लिए अलग-अलग लॉग फाइल की तारीख निर्धारित की जाए। फिर ब्रोकर को उन्हें साफ करना चाहिए और कुछ सेकंड के भीतर आपके लिए उन्हें हटा देना चाहिए। इससे कई लाभ मिलते हैं:

  1. दलालों को नीचे लाने की आवश्यकता नहीं है, यह एक रनटाइम ऑपरेशन है।
  2. अमान्य ऑफ़सेट अपवादों की संभावना से बचा जाता है (उस पर और अधिक)।

काफ्का 0.7.x के साथ मेरे अनुभव में, लॉग फ़ाइलों को हटाने और ब्रोकर को फिर से शुरू करने से कुछ उपभोक्ताओं के लिए अमान्य ऑफसेट अपवाद हो सकते हैं। ऐसा इसलिए होता है क्योंकि ब्रोकर ऑफ़सेट को शून्य पर (किसी भी मौजूदा लॉग फ़ाइलों की अनुपस्थिति में) पुनः आरंभ करता है, और एक उपभोक्ता जो पहले विषय से उपभोग कर रहा था, एक विशिष्ट [एक बार वैध] ऑफसेट का अनुरोध करने के लिए फिर से कनेक्ट होगा। यदि यह ऑफसेट नए विषय की सीमा के बाहर गिरता है, तो कोई नुकसान नहीं होता है और उपभोक्ता शुरुआत या अंत में शुरू करता है। लेकिन, यदि ऑफसेट नए विषय लॉग की सीमा के भीतर आता है, तो ब्रोकर संदेश सेट लाने का प्रयास करता है, लेकिन विफल हो जाता है क्योंकि ऑफ़सेट एक वास्तविक संदेश के लिए संरेखित नहीं करता है।

यह उस विषय के लिए ज़ुकीपर में उपभोक्ता ऑफसेट को साफ करके भी कम किया जा सकता है। लेकिन अगर आपको एक कुंवारी विषय की आवश्यकता नहीं है और केवल मौजूदा सामग्री को निकालना चाहते हैं, तो बस 'टच-आईएनजी कुछ विषय लॉग्स को ब्रोकरों को रोकने, विषय लॉग्स को हटाने और कुछ ज़ुकीर नोड्स को साफ़ करने की तुलना में कहीं अधिक आसान और विश्वसनीय है। ।


"प्रतिधारण अवधि से अधिक होने के लिए व्यक्तिगत लॉग फ़ाइलों की तिथि कैसे निर्धारित करें"? धन्यवाद
bylijinnan

3

थॉमस की सलाह बहुत अच्छी है लेकिन दुर्भाग्य zkCliसे ज़ुकीपर के पुराने संस्करणों में (उदाहरण के लिए 3.3.6) समर्थन करने के लिए प्रतीत नहीं होती है rmr। उदाहरण के लिए वर्जन 3.3 के साथ आधुनिक ज़ुकीपर में कमांड लाइन कार्यान्वयन की तुलना करें ।

यदि आप ज़ुकाइपर के पुराने संस्करण के साथ सामना कर रहे हैं, तो एक समाधान एक क्लाइंट लाइब्रेरी का उपयोग करना है जैसे कि पायथन के लिए zc.zk। पायथन से परिचित नहीं लोगों के लिए आपको इसे पाइप या easy_install का उपयोग करके इंस्टॉल करना होगा । फिर एक पायथन शेल शुरू करें ( python) और आप कर सकते हैं:

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

या और भी

zk.delete_recursive('brokers')

यदि आप काफ्का से सभी विषयों को हटाना चाहते हैं।


2

अपने एप्लिकेशन समूह का उपयोग करके किसी विशेष विषय के सभी संदेशों को साफ़ करने के लिए (GroupName अनुप्रयोग कफ़्का समूह के नाम के समान होना चाहिए)।

./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

@ जल्दबाजी में किए गए उत्तर के बाद मैंने काफ्का 2.2.0 पर निम्नलिखित आदेशों को निष्पादित किया और उन्होंने मेरे लिए काम किया।

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

यह अन्य उत्तरों की नकल करने लगता है
OneCricketeer

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
OneCricketeer

1
फिर भी, Zookeeper कंटेनर में निष्पादित गलत लगता है। you can use - ज़ुकीपर ज़ुकीपर: काफ़्का कंटेनर से 2181` मेरी बात है। या यहां तक ​​कि
सर्वर

@ क्रिकेट_007 हे, इसके लिए वास्तव में धन्यवाद, मैंने जवाब सही दिया, मुझे बताएं कि क्या अभी भी कुछ गलत है
व्लादिमीर सेमास्किन

1

आकार के कारण टिप्पणी के रूप में नहीं जोड़ा जा सका: यह निश्चित नहीं है कि क्या यह सत्य है, इसके अलावा अवधारण / एसएमएस और अवधारण.बाइट्स अपडेट करने के अलावा, लेकिन मैंने देखा कि विषय सफाई नीति "हटाएं" (डिफ़ॉल्ट) होनी चाहिए, अगर "कॉम्पैक्ट" हो, तो यह जा रहा है संदेशों को अधिक समय तक रोकें, अर्थात, यदि यह "कॉम्पैक्ट" है, तो आपको delete.retention.ms को भी निर्दिष्ट करना होगा ।

./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

इसके अलावा जल्द से जल्द / नवीनतम ऑफसेट की निगरानी करने के लिए होना चाहिए यह सफलतापूर्वक होने की पुष्टि करने के लिए भी होना चाहिए, डु -h / tmp / kafka- लॉग / परीक्षण-विषय-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. विषय मेटाडेटा को हटाने के लिए zCCli का उपयोग करें
    rmr /brokers/topic/<some_topic_name>

दलालों में फिर से:

  1. ब्रोकर सेवा को पुनः आरंभ करें
    sudo service kafka start

आपको प्रतिकृति के साथ प्रत्येक ब्रोकर की फ़ाइलों को रोकने और हटाने की आवश्यकता है, जिसका अर्थ है कि ऐसा करते समय आपके पास क्लाइंट डाउनटाइम हो सकता है
OneCricketeer

1
आप सही हैं, यह केवल आपको वास्तव में यह देखने देता है कि कफ़्का द्वारा कुछ चीजें संग्रहीत और प्रबंधित की जाती हैं। लेकिन यह ब्रूट-फोर्स दृष्टिकोण निश्चित रूप से उत्पादन चलाने वाली प्रणाली के लिए नहीं है।
डैनी मोर

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

यह retention.msकॉन्फ़िगर देना चाहिए । फिर आप 1second में बदलने के लिए ऊपर के कमांड का उपयोग कर सकते हैं (और बाद में डिफ़ॉल्ट में वापस लौटें)।

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;
  }

आप Zookeeper की जरूरत नहीं है। का प्रयोग करें AdminClientयाKafkaAdminClient
OneCricketeer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.