2015-04-08 11 views
21

KeyedMessage<String, byte[]> keyedMessage = new KeyedMessage<String, byte[]>(request.getRequestTopicName(),SerializationUtils.serialize(message)); producer.send(keyedMessage);कुंजी

वर्तमान में काफ्का में संदेश भेजने के हिस्से के रूप की आवश्यकता है या नहीं, मैं संदेश बंद संदेश के भाग के रूप में बनाए रखा किसी भी कुंजी के बिना, भेज रहा हूँ, यह अभी भी delete.retention.ms के साथ काम करेंगे मैं करने की आवश्यकता है संदेश के हिस्से के रूप में कुंजी भेजें? संदेश

उत्तर

49

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

एक राज्य मशीन के मामले में, कुंजी को उसी कुंजी के साथ प्रविष्टियों को समर्पित करने के लिए log.cleaner.enable के साथ उपयोग किया जा सकता है। उस स्थिति में, काफ्का मानते हैं कि आपका एप्लिकेशन केवल किसी दिए गए कुंजी के सबसे हालिया उदाहरण की परवाह करता है और लॉग क्लीनर केवल दी गई कुंजी के पुराने डुप्लिकेट को हटा देता है यदि कुंजी शून्य नहीं है। लॉग कंपैक्शन का यह रूप log.cleaner.delete.retention संपत्ति द्वारा नियंत्रित किया जाता है और कुंजी की आवश्यकता होती है।

वैकल्पिक रूप से, अधिक आम संपत्ति log.retention.hours, जो डिफ़ॉल्ट रूप से सक्षम है, पुराने लॉग के पूर्ण सेगमेंट को हटाकर काम करता है। इस मामले में चाबियाँ उपलब्ध नहीं कराई जानी चाहिए। कफका केवल उस अवधारण अवधि से पुराने लॉग के हिस्सों को हटा देगा।

यह सब कहना है, अगर आपने log compaction को सक्षम किया है या उसी कुंजी वाले संदेशों के लिए सख्त क्रम की आवश्यकता है तो आपको निश्चित रूप से कुंजी का उपयोग करना चाहिए। अन्यथा, नल कुंजी बेहतर वितरण प्रदान कर सकती हैं और उन मामलों में संभावित हॉट स्पॉटिंग समस्याओं को रोक सकती हैं जहां कुछ कुंजियां दूसरों की तुलना में अधिक दिखाई दे सकती हैं।

+0

मैं काफ्का के लिए नया हूं इसलिए सवाल पूछने का कारण है: इस पर कुछ सवाल हैं: पहला सवाल, क्या हम मुख्य आधार पर संदेश का उपभोग कर सकते हैं, वर्तमान में मैं MessagAndMetadata mm से संदेश ले रहा हूं। या संदेश लेने के समय कुंजी को अनदेखा करना ठीक है। मैं hig Level उपभोक्ता एपीआई का उपयोग कर रहा हूं। – gaurav

+0

@kuujo मुझे लगता है कि यह डी-डुप्लिकेशन केवल लॉग प्रविष्टियों के लिए है, यह किसी विषय पंक्ति पर संदेशों को डी-डुप्लिकेट करने की आवश्यकता नहीं है? – user1658296

+0

अच्छा जवाब। मैंने उससे जुड़ा हुआ है, मैं एक "बेस्ट प्रैक्टिस" दस्तावेज़ के लिए लिख रहा हूं जिस पर मैं काम कर रहा हूं (मैं एक ऐसी कंपनी के लिए काम करता हूं जो कफका के साथ एकीकृत करता है, अन्य चीजों के साथ)। इससे मुझे इस मुद्दे को समझने में मदद मिली, धन्यवाद। –