2015-09-04 17 views
80

मैं काफ्का के लिए अपेक्षाकृत नया हूं। मैंने इसके साथ थोड़ा सा प्रयोग किया है लेकिन कुछ चीजें उपभोक्ता ऑफसेट के बारे में मुझे अस्पष्ट नहीं हैं। जो मैंने समझा, उससे जब उपभोक्ता शुरू होता है, तो ऑफसेट इसे पढ़ने शुरू कर देगा, कॉन्फ़िगरेशन सेटिंग auto.offset.reset द्वारा निर्धारित किया गया है (यदि मैं गलत हूं तो मुझे सही करें)।कफका उपभोक्ता ऑफ़सेट क्या निर्धारित करता है?

अब उदाहरण के लिए, इस विषय में 10 संदेश (ऑफसेट 0 से 9) हैं, और एक उपभोक्ता 5 से पहले उपभोग करने से पहले (या उपभोक्ता को मारने से पहले) उपभोग करता था। फिर कहें कि मैं उस उपभोक्ता प्रक्रिया को पुनरारंभ करता हूं। मेरे प्रश्न हैं:

यदि auto.offset.resetsmallest पर सेट है, तो क्या यह हमेशा ऑफसेट 0 से उपभोग शुरू करने जा रहा है?

यदि auto.offset.resetlargest पर सेट है, तो क्या यह ऑफ़सेट 5 से उपभोग शुरू कर रहा है?

क्या इस तरह के परिदृश्य के बारे में व्यवहार हमेशा निर्धारक है? अगर मेरे प्रश्न में कुछ भी अस्पष्ट है तो कृपया टिप्पणी करने में संकोच न करें। अग्रिम में धन्यवाद।

उत्तर

139

यह आपके वर्णन से थोड़ा अधिक जटिल है। auto.offset.reset कॉन्फ़िगरेशन केवल तभी होता है जब आपके उपभोक्ता समूह के पास कहीं वैध वैध ऑफसेट नहीं है (2 समर्थित ऑफसेट स्टोरेज अब कफ्का और जुकीपर हैं)। और यह भी निर्भर करता है कि आप किस प्रकार के उपभोक्ता का उपयोग करते हैं।

आप तो एक उच्च स्तरीय जावा उपभोक्ता का उपयोग करते हैं निम्न परिदृश्यों की कल्पना:

  1. आप एक उपभोक्ता समूह group1 कि 5 संदेशों का सेवन किया और मर गया में एक उपभोक्ता की है। अगली बार जब आप इस उपभोक्ता को शुरू करेंगे तो वह auto.offset.reset कॉन्फ़िगरेशन का भी उपयोग नहीं करेगा और यह उस स्थान से जारी रहेगा जहां यह मर गया था क्योंकि यह ऑफसेट स्टोरेज (कफका या जेडके जैसा मैंने उल्लेख किया है) से संग्रहीत ऑफसेट लाएगा।

  2. आपके पास किसी विषय में संदेश हैं (जैसा आपने बताया है) और आप एक उपभोक्ता समूह group2 में उपभोक्ता शुरू करते हैं। कोई ऑफसेट है कहीं भी संग्रहीत और इस बार auto.offset.reset config विषय (smallest) की शुरुआत से शुरू करने के लिए है कि क्या तय करेगा या प्रभावित करता है क्या ऑफसेट विषय (largest)

एक और बात के अंत से मान smallest और largest कॉन्फ़िगरेशन लॉग प्रतिधारण नीति के अनुरूप होगा। कल्पना करें कि आपके पास 1 घंटे तक कॉन्फ़िगर किए गए प्रतिधारण के साथ एक विषय है। आप 5 संदेश उत्पन्न करते हैं, और फिर एक घंटे बाद आप 5 और संदेश पोस्ट करते हैं। largest ऑफसेट अभी भी पिछले उदाहरण जैसा ही रहेगा लेकिन smallest कोई 0 नहीं हो पाएगा क्योंकि कफका इन संदेशों को पहले ही हटा देगा और इस प्रकार सबसे छोटा उपलब्ध ऑफसेट 5 होगा।

ऊपर वर्णित सब कुछ SimpleConsumer से संबंधित नहीं है और हर बार जब आप इसे चलाते हैं, तो यह तय करेगा कि auto.offset.reset कॉन्फ़िगरेशन का उपयोग करने से कहां से शुरू किया जाए।

+2

धन्यवाद उत्तर के लिए बहुत बहुत शुरूआत की। तो उच्च स्तर के उपभोक्ता के लिए, उपभोक्ता के पास कुछ करने के बाद (या तो जेडके या काफ्का में), 'auto.offset.reset' के बाद कोई महत्व नहीं है? उस सेटिंग का एकमात्र महत्व तब होता है जब कुछ भी नहीं किया जाता है (और आदर्श रूप से उपभोक्ता के पहले स्टार्ट-अप में होगा)? –

+1

वास्तव में के रूप में आप वर्णित – serejja

+0

करता है 'संघनन' लॉग के साथ किसी भी भूमिका ऑफसेट है .. – peaceUser

35

बस एक अपडेट: काफ्का 0.9 और आगे से, काफ्का उपभोक्ता के एक नए जावा संस्करण का उपयोग कर रहा है और auto.offset.reset पैरामीटर नाम बदल गए हैं; मैनुअल से:

जब कोई प्रारंभिक काफ्का में या यदि वर्तमान ऑफसेट ऑफसेट सर्वर पर किसी भी अधिक मौजूद नहीं है क्या करना है (उदाहरण के लिएक्योंकि उस डेटा हटा दिया गया है):

जल्द से जल्द: स्वचालित रूप से जल्द से जल्द करने के लिए ऑफसेट रीसेट ऑफसेट

नवीनतम: स्वचालित रूप से नवीनतम करने के लिए ऑफसेट रीसेट ऑफसेट

कोई भी: फेंक उपभोक्ता के लिए अपवाद है, तो कोई पिछले ऑफसेट उपभोक्ता के समूह

कुछ भी ई के लिए पाया जाता है lse: उपभोक्ता को अपवाद फेंक दें।

मैंने स्वीकार किए गए उत्तर की जांच के बाद इसे खोजने के लिए कुछ समय बिताया, इसलिए मैंने सोचा कि समुदाय इसे पोस्ट करने के लिए उपयोगी हो सकता है।

2

इसके अलावा अधिक वहाँ offsets.retention.minutes है। समय के बाद से पिछले प्रतिबद्ध है>offsets.retention.minutes, की तुलना में auto.offset.reset भी

+0

does not को इस लॉग बनाए रखने के साथ निरर्थक लग रहे है? प्रतिधारण धारण करना चाहिए प्रतिधारण पर आधारित होना चाहिए? – mike01010

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