2016-12-14 11 views
8

मैं कफका और जुकीपर का उपयोग करते समय ऑफसेट को संग्रहीत करने के बारे में थोड़ा उलझन में हूं। ऐसा लगता है कि कुछ मामलों में ऑफसेट्स जुकीपर में संग्रहीत हैं, अन्य मामलों में वे कफका में संग्रहित हैं।जुकीपर या काफ्का में संग्रहीत ऑफसेट?

क्या निर्धारित करता है कि ऑफसेट को काफ्का या जुकीपर में संग्रहीत किया जाता है या नहीं? और पेशेवरों और विपक्ष क्या हैं?

एनबी: बेशक मैं ऑफसेट को कुछ अलग डेटा स्टोर में भी स्टोर कर सकता हूं लेकिन यह इस पोस्ट के लिए तस्वीर का हिस्सा नहीं है।

मेरी स्थापना के बारे में कुछ और जानकारी:

  • मैं इन संस्करणों चलाएँ: KAFKA_VERSION = "0.10.1.0", SCALA_VERSION = "2.11"
  • मैं से काफ्का नोड का उपयोग कर काफ्का/Zookeeper से कनेक्ट मेरी नोडजेएस आवेदन। काफ्का की

उत्तर

21

पुराने संस्करण (पूर्व 0.9) दुकान ऑफसेट ZK में केवल, जबकि एक आंतरिक काफ्का विषय में काफ्का के नए संस्करण, डिफ़ॉल्ट स्टोर ऑफसेट द्वारा बुलाया __consumer_offsets (नया संस्करण अभी भी ZK के लिए प्रतिबद्ध सकता है)।

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

मैं नोडजेएस या काफ्का-नोड से परिचित नहीं हूं - यह क्लाइंट कार्यान्वयन पर निर्भर करता है कि ऑफसेट कैसे किए जाते हैं।

लंबी कहानी लघु: यदि आप ब्रोकर 0.10.1.0 का उपयोग करते हैं तो आप __consumer_offsets पर ऑफ़सेट कर सकते हैं। लेकिन यह आपके क्लाइंट पर निर्भर करता है, अगर यह इस प्रोटोकॉल को लागू करता है।

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

जावा उपभोक्ताओं के लिए:

यह निर्भर करता है कि क्या उपभोक्ता उपयोग कर रहे हैं: 0.9 से पहले देखते हैं दो "पुराने उपभोक्ता" अर्थात् "उच्च स्तर उपभोक्ता" और "कम स्तर उपभोक्ता"। दोनों, सीधे जेडके को ऑफ़सेट करें। चूंकि 0.9, दोनों उपभोक्ताओं को "उपभोक्ता" नामक एकल उपभोक्ता में विलय कर दिया गया है (यह मूल रूप से पुराने उपभोक्ताओं दोनों के निम्न स्तर और उच्च स्तरीय एपीआई को एकीकृत करता है - इसका मतलब है, 0.9 में तीन प्रकार के उपभोक्ता हैं)। नया उपभोक्ता दलालों (यानी, आंतरिक काफ्का विषय)

अपग्रेडिंग को आसान बनाने के लिए, पुराने उपभोक्ता (के रूप में) का उपयोग करके ऑफसेट को "डबल प्रतिबद्ध" करने की संभावना भी है। यदि आप इसे dual.commit.enabled के माध्यम से सक्षम करते हैं, तो ऑफसेट ZK और __consumer_offsets विषय के लिए प्रतिबद्ध हैं। यह आपको पुराने उपभोक्ता एपीआई से नए उपभोक्ता एपीआई में स्विच करने की अनुमति देता है जबकि आपको जेडके से ऑफसेट्स को __consumer_offsets विषय पर ले जाया जाता है।

+0

Thx, मैं नवीनतम एपीआई में अपग्रेड करना सुनिश्चित कर दूंगा। –

1

यह सब इस बात पर निर्भर करता है कि आप किस उपभोक्ता का उपयोग कर रहे हैं। आपको अपने काफ्का संस्करण के आधार पर सही उपभोक्ता चुनना चाहिए।

संस्करण 0.8 ब्रोकर HighLevelConsumer का उपयोग करते हैं। आपके समूहों के लिए ऑफसेट्स ज़ूकीपर में संग्रहीत हैं।

ब्रोकर 0.9 और उच्चतर के लिए आपको नए ConsumerGroup का उपयोग करना चाहिए। ऑफसेट को काफ्का दलालों के साथ संग्रहित किया जाता है।

ध्यान रखें कि HighLevelConsumer अभी भी 0.8 के संस्करणों के साथ काम करेगा लेकिन उन्हें 0.10.1 में बहिष्कृत कर दिया गया है और समर्थन शायद जल्द ही दूर हो जाएगा। ConsumerGroup में HighLevelConsumer से स्थानांतरित करने में सहायता के लिए रोलिंग माइग्रेशन विकल्प हैं यदि आप इसका उपयोग करने के लिए प्रतिबद्ध थे।

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