कफका साइट के अनुसार :
" काफा का उपयोग वास्तविक समय डेटा पाइपलाइन और स्ट्रीमिंग ऐप के निर्माण के लिए किया जाता है। "
इंटरनेट को दूर-दूर तक खोजते हुए, मैंने " स्ट्रीम डेटा " क्या है, इसकी आम तौर पर स्वीकृत परिभाषा निम्नलिखित है:
- स्ट्रीम डेटा वह डेटा है जो किसी स्रोत से किसी नेटवर्क पर गंतव्य तक आकस्मिक रूप से प्रवाहित होता है; तथा
- स्ट्रीम डेटा प्रकृति में परमाणु नहीं है, जिसका अर्थ है कि डेटा की एक बहने वाली धारा का कोई भी हिस्सा सार्थक और प्रक्रियात्मक है, एक फाइल के विपरीत जिसका बाइट्स का कोई मतलब नहीं है जब तक कि आप उन सभी के पास नहीं हैं; तथा
- स्ट्रीम डेटा किसी भी समय शुरू / बंद किया जा सकता है; तथा
- उपभोक्ता अपनी इच्छानुसार डेटा की एक धारा से संलग्न और अलग कर सकते हैं, और इसके कुछ हिस्सों को संसाधित कर सकते हैं जो वे चाहते हैं
अब, अगर मैंने ऊपर जो कुछ भी कहा है वह गलत है, अधूरा है या पूरी तरह से गलत है, कृपया मुझे सुधार कर शुरू करें! यह मानकर कि मैं कमोबेश ट्रैक पर हूं, तब ...
अब जब मैं समझता हूं कि "स्ट्रीमिंग डेटा" क्या है, तो मैं समझता हूं कि काफ्का और काइनिस का क्या मतलब है जब वे स्ट्रीमिंग डेटा के साथ अनुप्रयोगों के लिए प्रसंस्करण / ब्रोकरिंग मिडलवेयर के रूप में खुद को बिल करते हैं। लेकिन इसने मेरे हितों को धक्का दिया है: पारंपरिक संदेश दलालों की तरह गैर-स्ट्रीमिंग डेटा के लिए काफ्का या काइनिस की तरह "स्ट्रीम मिडिलवेयर" का उपयोग किया जा सकता है? और इसके विपरीत: क्या RabbitMQ, ActiveMQ, Apollo, आदि जैसे पारंपरिक MQ को स्ट्रीमिंग डेटा के लिए उपयोग किया जाना चाहिए?
आइए एक उदाहरण लेते हैं जहां एक एप्लिकेशन को JSON संदेशों के अपने बैकएंड निरंतर बैराज को भेजना होगा, जिसे संसाधित करने की आवश्यकता है, और प्रसंस्करण काफी जटिल है (सत्यापन, डेटा पर रूपांतरण, फ़िल्टरिंग, एकत्रीकरण, आदि):
- केस # 1: संदेश एक फिल्म के प्रत्येक फ्रेम हैं; यह फ्रेम डेटा और कुछ सहायक मेटाडेटा वाले वीडियो फ्रेम प्रति एक JSON मैसेंजर है
- केस # 2: संदेश समय-श्रृंखला के डेटा हैं, शायद समय के कार्य के रूप में किसी के दिल की धड़कन। इसलिए संदेश # 1 को t = 1 पर मेरे दिल की धड़कन का प्रतिनिधित्व करने के लिए भेजा जाता है, संदेश # 2 में t = 2, आदि पर मेरे दिल की धड़कन होती है।
- केस # 3: डेटा समय के अनुसार या किसी भी "डेटा स्ट्रीम" के हिस्से के रूप में पूरी तरह से असमान और गैर-संबंधित है। शायद ऑडिट / सुरक्षा ईवेंट जो सैकड़ों उपयोगकर्ताओं के रूप में निकाल दिए जाते हैं, बटन क्लिक करने और कार्रवाई करने वाले एप्लिकेशन को नेविगेट करते हैं
कफ़्का / किनसिस कैसे बिल किया जाता है और "स्ट्रीमिंग डेटा" की मेरी समझ के आधार पर, वे मामलों # 1 (सन्निहित वीडियो डेटा) और # 2 (सन्निहित समय-श्रृंखला डेटा) के लिए स्पष्ट उम्मीदवार प्रतीत होते हैं। हालाँकि मुझे कोई कारण नहीं दिखता है कि RabbitMQ जैसे पारंपरिक संदेश ब्रोकर इन दोनों इनपुटों को कुशलता से संभाल नहीं पाए ।
और केस # 3 के साथ, हमें केवल एक ईवेंट प्रदान किया गया है जो घटित हुआ है और हमें उस ईवेंट पर प्रतिक्रिया देने की आवश्यकता है। तो मेरे लिए यह RabbitMQ जैसे पारंपरिक ब्रोकर की जरूरत है। लेकिन वहाँ भी कोई कारण नहीं है कि आप काफ्का या किनेसिस घटना डेटा के प्रसंस्करण को संभाल नहीं सकते थे।
इसलिए मूल रूप से, मैं एक रूब्रिक की स्थापना करना चाह रहा हूं जो कहता है: मेरे पास वाई विशेषताओं के साथ एक्स डेटा है। मुझे इसे संभालने के लिए काफ्का / किनेसिस जैसे स्ट्रीम प्रोसेसर का उपयोग करना चाहिए। या, इसके विपरीत, एक जो मुझे यह निर्धारित करने में मदद करता है: मेरे पास जेड विशेषताओं के साथ डब्ल्यू डेटा है। मुझे इसे संभालने के लिए एक पारंपरिक संदेश ब्रोकर का उपयोग करना चाहिए।
इसलिए मैं पूछता हूं: डेटा के बारे में कौन से कारक (या अन्यथा) स्ट्रीम प्रोसेसर या संदेश ब्रोकर के बीच निर्णय लेने में मदद करते हैं, क्योंकि दोनों स्ट्रीमिंग डेटा को संभाल सकते हैं, और दोनों (गैर-स्ट्रीमिंग) संदेश डेटा को संभाल सकते हैं?