2015-11-12 11 views
17

में किसी मौजूदा विषय में विभाजन जोड़ना संभव है मेरे पास 2 विभाजन के साथ एक कफका क्लस्टर चल रहा है। मैं विभाजन संख्या को 3 तक बढ़ाने का एक तरीका ढूंढ रहा था। हालांकि, मैं इस विषय में मौजूदा संदेश खोना नहीं चाहता हूं। मैंने कफका को रोकने की कोशिश की, server.properties फ़ाइल को संशोधित करने के लिए विभाजन 3 की संख्या बढ़ाने और कफका को पुनरारंभ करने के लिए। हालांकि, यह कुछ भी बदलने के लिए प्रतीत नहीं होता है। काफ्का ConsumerOffsetChecker का उपयोग करके, मुझे अभी भी लगता है कि यह केवल 2 विभाजन का उपयोग कर रहा है। मैं उपयोग कर रहा हूँ काफ्का संस्करण 0.8.2.2 है। संस्करण 0.8.1 में, kafka-add-partitions.sh नामक एक स्क्रिप्ट होती थी, जो मुझे लगता है कि चाल चल सकती है। हालांकि, मुझे 0.8.2 में ऐसी कोई स्क्रिप्ट नहीं दिखाई दे रही है। क्या इसे पूरा करने का कोई तरीका है? मैंने एक नया नया विषय बनाने के साथ प्रयोग किया और इसके लिए server.properties फ़ाइल में परिवर्तन के अनुसार यह 3 विभाजन का उपयोग करता प्रतीत होता है। हालांकि, मौजूदा विषयों के लिए, यह परवाह नहीं प्रतीत होता है।क्या कफका 0.8.2

+0

अपाचे काफ्का की नवीनतम रिलीज है, मुझे शक है तो आप "2.10" का उपयोग कर रहे हैं। आप फिर से संस्करणों की जांच कर सकते हैं। – C4stor

+0

@ सी 4 स्टोर वास्तव में मेरा मतलब काफ़का था जो स्कैला 2.10 पर आधारित है, जो वास्तव में आपके द्वारा 0.8.2.2 का उल्लेख किया गया संस्करण है। गलतफहमी के लिए खेद है। मैं अपना प्रश्न संपादित करूंगा। –

उत्तर

36

ऐसा लगता है कि आप के बजाय this स्क्रिप्ट का उपयोग कर सकते हैं:

bin/kafka-topics.sh --zookeeper zk_host:port/chroot --alter --topic my_topic_name 
    --partitions 40 

कोड ऐसा लगता है जैसे वे एक ही बात करते हैं:

AdminUtils.createOrUpdateTopicPartitionAssignmentPathInZK(topic, partitionReplicaList, zkClient, true) 

kafka-topics.shAddPartitionsCommandthis कोड का टुकड़ा के साथ ही द्वारा प्रयोग किया जाता कार्यान्वित kafka-add-विभाजन स्क्रिप्ट।

लेकिन अगर आप फिर से विभाजन के बारे में पता होना करने के लिए जब कुंजी का उपयोग किया है:

पता है कि विभाजन के लिए एक विभाजन उपयोग के मामले डेटा, और जोड़ने विभाजन शब्दार्थ के विभाजन नहीं बदलता है हो सकता है मौजूदा डेटा इसलिए यह उपभोक्ताओं को परेशान कर सकता है अगर वे उस विभाजन पर भरोसा करते हैं। ऐसा होता है कि डेटा hash(key) % number_of_partitions द्वारा विभाजित किया गया है तो यह विभाजन संभावित रूप से विभाजन जोड़कर शफल हो जाएगा लेकिन कफका स्वचालित रूप से डेटा को फिर से वितरित करने का प्रयास नहीं करेगा।

+0

धन्यवाद। कोशिश करो –

+1

यदि डेटा को दोबारा विभाजित करना है, तो क्या ऐसे संदेशों पर केवल एक तरीका है जो पढ़े गए संदेशों को पढ़ और अनदेखा नहीं किया गया है? 'परिशिष्ट-केवल' दर्शन के साथ – Glide

+1

, मुझे लगता है कि आपको इसे प्राप्त करने के लिए बहुत अधिक लंबाई होगी। मैं कहूंगा कि उस विषय पर खपत को रोकना सबसे आसान है, अपने इच्छित विभाजनों की मात्रा के साथ एक नया विषय बनाएं, अपठित संदेशों को नए विषय पर दोबारा प्रकाशित करें और फिर नए विषय को खपत जारी रखें। – CmdrDats

2

कृपया ध्यान दें कि मेरे मामले मूल्य zk_host में: पोर्ट/पैरामीटर के लिए chroot --zookeeper निम्न अपवाद दिए:

त्रुटि java.lang.IllegalArgumentException: विषय my_topic_name ZK पथ zk_host पर मौजूद नहीं है: बंदरगाह/chroot।

तो, मैं निम्नलिखित की कोशिश की और यह काम किया:

0.8.2.2
bin/kafka-topics.sh --alter --zookeeper zk_host:port --topic my_topic_name --partitions 10 
+0

'chroot' एक * वैकल्पिक * कॉन्फ़िगरेशन सेटिंग है, जिसका अर्थ शाब्दिक रूप से नहीं लिया जाना है –

संबंधित मुद्दे