फ्लिंक और स्टॉर्म के बीच मुख्य अंतर क्या हैं?


137

Flink कर दिया गया है स्पार्क की तुलना में , जो, के रूप में मैं इसे देखना, गलत तुलना है, क्योंकि यह सूक्ष्म बैचिंग के खिलाफ एक विंडोड घटना प्रसंस्करण प्रणाली तुलना; इसी तरह, फ्लिंक की तुलना समजा से करने से मुझे कोई मतलब नहीं है। दोनों मामलों में यह एक वास्तविक समय बनाम एक बैचेड ईवेंट प्रोसेसिंग रणनीति की तुलना करता है, भले ही वह सामजा के मामले में छोटे "पैमाने" पर हो। लेकिन मैं यह जानना चाहूंगा कि फ्लिंक की तुलना स्टॉर्म से कैसे की जाती है, जो वैचारिक रूप से बहुत अधिक समान है।

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

वह सब मेरे लिए थोड़ा विरल है और मुझे यह बात बिल्कुल रास नहीं आती। क्या कोई समझा सकता है कि तूफान में धारा प्रसंस्करण के साथ क्या समस्या है? एपीआई मुद्दों और उनकी "अधिक हल्के वजन वाली सहिष्णुता की रणनीति" का जिक्र करते हुए हसेके क्या है?


2
ध्यान दें कि अपाचे स्पार्क (लिंक किए गए प्रश्न का फोकस) अपाचे स्टॉर्म (यह सवाल यहां) के समान नहीं है - इसलिए, नहीं, यह कोई मतलब नहीं है एक डुप्लिकेट है।
fnl

जवाबों:


212

अस्वीकरण : मैं एक अपाचे फ्लिंक कमिटर और पीएमसी सदस्य हूं और केवल स्टॉर्म के उच्च-स्तरीय डिजाइन से परिचित हूं, न कि इसके आंतरिक।

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

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

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

तूफान भी त्रिशूल नामक एक बिल्कुल उच्च स्तरीय एपीआई प्रदान करता है। हालांकि, ट्राइडेंट मिनी-बैचों पर आधारित है और इसलिए फ्लिंक की तुलना में स्पार्क के समान है।

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


2
आपका बहुत - बहुत धन्यवाद! एक खुला बिंदु हो सकता है, अगर मैं आपको एक बार फिर परेशान कर सकता हूं: यह "समायोज्य विलंबता" मुद्दा क्या है? ऐसा लगता है कि यह बहुत प्रासंगिक हो सकता है कि विभिन्न अनुप्रयोग डोमेन को इस संबंध में अलग-अलग आवश्यकताएं होंगी। क्या आप बता सकते हैं कि इसका क्या मतलब है, कम से कम फ्लिंक के संदर्भ में?
fnl

6
ज़रूर, मैंने अपना जवाब बढ़ाया और समायोज्य विलंबता पर चर्चा की। अगर आपको कोई शंका हो तो मुझे बतायें।
Fabian Hueske

क्या Flink DAG वर्कफ़्लो में "गर्म" परिवर्तनों के लिए अनुमति देता है, जैसा कि कोई लागू कर सकता है, उदाहरण के लिए, Erlang का उपयोग करके? अर्थात। क्या कोई DAG को रनटाइम के दौरान बदल सकता है?
थॉमस ब्राउन

1
हॉट कोड स्वैप संभव नहीं है। हालाँकि, आप किसी अनुप्रयोग की स्थिति को सहेजने के रूप में जारी रख सकते हैं। Savepoint का उपयोग संशोधित एप्लिकेशन को शुरू करने के लिए किया जा सकता है। यह तब किया जा सकता है जब मूल अनुप्रयोग अभी भी चल रहा है ताकि आउटपुट किसी बिंदु पर फ़्लिप किया जा सके। ध्यान दें कि मौजूदा सहेजने से फिर से शुरू होने पर ऐप्स को मनमाने ढंग से संशोधित नहीं किया जा सकता है।
फेबियन ह्सेके

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

47

फेबियन हूसके के उत्तर में जोड़ना:

अतिरिक्त रूप से भी स्टॉर्म पर फ्लिंक में सुधार होता है:

  • Backpressure: विभिन्न ऑपरेटरों द्वारा अलग-अलग गति से चलने पर फ्लिंक के स्ट्रीमिंग रनटाइम का अच्छा व्यवहार किया जाता है, क्योंकि डाउनस्ट्रीम ऑपरेटर्स अपस्ट्रीम ऑपरेटर्स को बहुत अच्छी तरह से चलाते हैं, हालांकि नेटवर्क लेयर बफ़र पूल का प्रबंधन करता है।

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

  • विंडोज स्ट्रीम करना: स्ट्रीम स्ट्रीमिंग और विंडो एग्रीगेशन डेटा स्ट्रीम के विश्लेषण के लिए एक महत्वपूर्ण बिल्डिंग ब्लॉक है। फ्लिंक काफी शक्तिशाली विंडोिंग सिस्टम के साथ आता है जो कई तरह की खिड़कियों को सपोर्ट करता है।


2
अपने पहले बिंदु के बारे में, स्टॉर्म को 1.0 के रूप में बैकप्रेस के तहत अच्छी तरह से व्यवहार किया जाता है (अप्रैल 2016 को जारी किया गया)
कॉलिन निकोल्स

"Spout_max_pending" प्रॉपर्टी का उपयोग करके स्टॉर्म बैकपेचर को कम किया जा सकता है। यह अधिकतम टुपल्स के लिए एक सीमा निर्धारित करता है जो एक टोंटी में मौजूद हो सकता है जो लंबित पावती है। टॉक तब तक आगे बढ़ने वाले किसी भी टुपल्स का उपभोग नहीं करेगा जब तक कि ऐक नहीं होता।
अमन गर्ग

3

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

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

3

डिस्क्लेमर: मैं स्टोर्डा का एक कर्मचारी हूं, स्टॉर्म का एक प्रमुख समर्थक और (जल्द ही) फ्लिंक।

कार्यात्मक

बहुत सारे अच्छे तकनीकी बिंदु पहले ही प्रस्तुत किए जा चुके हैं। मुख्य आकर्षण का एक छोटा सारांश:

  • फ्लिंक और स्टॉर्म दोनों प्रति घटना प्रसंस्करण कर सकते हैं
  • स्टॉर्म बॉक्स के बाहर इवेंट-टाइम का समर्थन नहीं करता है
  • प्रायोगिक चरण के बाहर तूफान ने एसक्यूएल समर्थन को नहीं उठाया है

गैर कार्यात्मक

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

निष्कर्ष

क्लाउडरा ने हाल ही में स्टॉर्म (एचडीपी में) के अपवर्जन की घोषणा की है। और साथ ही साथ फ्लिंक को इसके उत्तराधिकारी के रूप में घोषित किया गया।

इसलिए, यदि आपके पास तूफान है, तो वे निश्चित रूप से काम करना जारी रखेंगे। लेकिन नए usecases के लिए मैं Flink या अन्य स्ट्रीमिंग इंजन में देखूंगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.