5

पर लुकअप डेटा के साथ काफ्का स्ट्रीम मैं कफका स्ट्रीम (v0.10.0.1) के साथ एक एप्लीकेशन लिख रहा हूं और मैं उन रिकॉर्ड्स को समृद्ध करना चाहता हूं जिन्हें मैं लुकअप डेटा के साथ संसाधित कर रहा हूं। यह डेटा (टाइमस्टैम्प फ़ाइल) दैनिक आधार पर (या दिन में 2-3 बार) एचडीएफएस निर्देशिका में लिखा जाता है।एचडीएफएस

मैं इसे Kafka Streams एप्लिकेशन में कैसे लोड कर सकता हूं और वास्तविक KStream में शामिल हो सकता हूं?
जब कोई नई फ़ाइल आती है तो एचडीएफएस से डेटा को फिर से पढ़ने का सबसे अच्छा अभ्यास क्या होगा?

या यह Kafka Connect पर बेहतर स्विचिंग होगा और आरडीबीएमएस टेबल सामग्री को एक कफका विषय में लिखना होगा जिसे सभी काफ्का स्ट्रीम एप्लिकेशन उदाहरणों से उपभोग किया जा सकता है?

अद्यतन:
के रूप में सुझाव दिया काफ्का कनेक्ट जाने का रास्ता होगा। चूंकि लुकअप डेटा को दैनिक आधार पर आरडीबीएमएस में अपडेट किया गया है, इसलिए मैं हमेशा कनेक्शन को खोलने के बजाय निर्धारित one-off job के रूप में काफ्का कनेक्ट चलाने के बारे में सोच रहा था। हां, अर्थशास्त्र और कनेक्शन को बनाए रखने के ऊपरी हिस्से के कारण हमेशा खुला रहता है और यह सुनिश्चित कर रहा है कि यह बाधित नहीं होगा .. आदि। मेरे लिए इस मामले में निर्धारित अनुसूचित जाति सुरक्षित दिखती है।

लुकअप डेटा बड़ा नहीं है और रिकॉर्ड हटाया/जोड़ा/संशोधित हो सकता है। मैं नहीं जानता कि कैसे मैं हमेशा एक कफका विषय में एक पूर्ण डंप कर सकता हूं और पिछले रिकॉर्ड को छोटा कर सकता हूं। लॉग कॉम्पैक्शन को सक्षम करना और हटाए गए कुंजियों के लिए शून्य मान भेजना शायद काम नहीं करेगा क्योंकि मुझे नहीं पता कि स्रोत सिस्टम में क्या हटा दिया गया है। इसके अतिरिक्त AFAIK जब कनेक्शन होता है तो मेरे पास नियंत्रण नहीं होता है।

+1

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

उत्तर

2

अनुशंसा दृष्टिकोण वास्तव में कफका में लुकअप डेटा को निगलना है - उदाहरण के लिए काफ्का कनेक्ट के माध्यम से - जैसा कि आपने स्वयं से ऊपर सुझाव दिया है।

लेकिन इस मामले में मैं अपने मामले में आवश्यक स्रोत तालिका से लगातार प्राप्त करने के बजाय दैनिक आधार पर कनेक्ट नौकरी कैसे निर्धारित कर सकता हूं?

शायद आप अपने प्रश्न को अपडेट कर सकते हैं कि आप लगातार कफका कनेक्ट नौकरी नहीं चलाना चाहते हैं? क्या आप संसाधन खपत (डीबी पर लोड) के बारे में चिंतित हैं, क्या आप प्रसंस्करण के अर्थशास्त्र के बारे में चिंतित हैं यदि यह "दैनिक udpates" नहीं है, या ...?

अद्यतन: के रूप में सुझाव दिया काफ्का कनेक्ट जाने का रास्ता होगा। चूंकि लुकअप डेटा दैनिक आधार पर आरडीबीएमएस में अपडेट किया जाता है, इसलिए मैं कनेक्शन को हमेशा खुला रखने के बजाय कफका कनेक्ट को शेड्यूल किए गए एक-ऑफ जॉब के रूप में चलाने के बारे में सोच रहा था। हां, अर्थशास्त्र और कनेक्शन को बनाए रखने के ऊपरी हिस्से के कारण हमेशा खुला रहता है और यह सुनिश्चित कर रहा है कि यह बाधित नहीं होगा .. आदि। मेरे लिए इस मामले में निर्धारित अनुसूचित जाति सुरक्षित दिखती है।

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

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

लुकअप डेटा बड़ा नहीं है और रिकॉर्ड हटा दिए/जोड़े/संशोधित किए जा सकते हैं। मैं नहीं जानता कि कैसे मैं हमेशा एक कफका विषय में एक पूर्ण डंप कर सकता हूं और पिछले रिकॉर्ड को छोटा कर सकता हूं। लॉग कॉम्पैक्शन को सक्षम करना और हटाए गए कुंजियों के लिए शून्य मान भेजना शायद काम नहीं करेगा क्योंकि मुझे नहीं पता कि स्रोत सिस्टम में क्या हटा दिया गया है।

काफ्का कनेक्ट के लिए JDBC कनेक्टर पहले से ही आप के लिए स्वचालित रूप से इस संभालती है: 1. यह सुनिश्चित करता है कि डीबी सम्मिलित करता है/अद्यतन/नष्टकरण ठीक से एक काफ्का विषय में परिलक्षित होते हैं, और 2. काफ्का की लॉग संघनन सुनिश्चित करता है कि लक्ष्य विषय नहीं करता है सीमा से बाहर नहीं बढ़ेगा। शायद आप दस्तावेज़ों में जेडीबीसी कनेक्टर पर पढ़ना चाह सकते हैं ताकि आप यह जान सकें कि आप किस कार्यक्षमता को मुफ्त में प्राप्त करते हैं: http://docs.confluent.io/current/connect/connect-jdbc/docs/?

+0

मेरा जवाब अपडेट किया गया :-) –

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