ตามไซต์ Kafka :
" Kakfa ใช้สำหรับสร้างท่อข้อมูลและแอพสตรีมมิ่งแบบเรียลไทม์ "
การค้นหาอินเทอร์เน็ตอย่างกว้างขวางฉันได้พบคำจำกัดความที่เป็นที่ยอมรับโดยทั่วไปของคำว่า " ข้อมูลสตรีม " คืออะไร:
- ข้อมูลสตรีมเป็นข้อมูลที่ไหลอย่างต่อเนื่องจากต้นทางไปยังปลายทางผ่านเครือข่าย และ
- ข้อมูลสตรีมไม่ได้เป็นแบบอะตอมมิคหมายถึงส่วนใด ๆ ของสตรีมข้อมูลที่มีความหมายและสามารถประมวลผลได้ซึ่งตรงข้ามกับไฟล์ที่มีไบต์ไม่ได้มีความหมายอะไรนอกจากคุณจะมีทั้งหมด และ
- ข้อมูลสตรีมสามารถเริ่ม / หยุดได้ตลอดเวลา และ
- ผู้บริโภคสามารถแนบและแยกออกจากกระแสข้อมูลตามความประสงค์และประมวลผลเฉพาะส่วนที่ต้องการ
ตอนนี้ถ้ามีสิ่งใดที่ฉันกล่าวข้างต้นไม่ถูกต้องไม่สมบูรณ์หรือผิดทั้งหมดโปรดเริ่มต้นด้วยการแก้ไขฉัน! สมมติว่าฉันติดตามมากกว่าหรือน้อยกว่านั้น ...
ตอนนี้ฉันเข้าใจแล้วว่า "การสตรีมข้อมูล" คืออะไรจากนั้นฉันก็เข้าใจว่าคาฟคาและไคเนซิสหมายถึงอะไรเมื่อพวกเขาเรียกเก็บเงินด้วยตนเองว่าเป็นตัวกลางในการประมวลผล / การเป็นนายหน้าตัวกลางสำหรับแอปพลิเคชัน แต่มันทำให้ฉันสนใจ: สามารถ / ควร "สตรีมมิดเดิลแวร์" เช่น Kafka หรือ Kinesis ใช้สำหรับข้อมูลที่ไม่ได้สตรีมมิงเช่นโบรกเกอร์ข้อความแบบดั้งเดิมหรือไม่ และในทางกลับกัน: สามารถ / ควรใช้ MQ แบบดั้งเดิมเช่น RabbitMQ, ActiveMQ, Apollo และอื่น ๆ เพื่อใช้ในการสตรีมข้อมูล?
ลองมาตัวอย่างที่แอปพลิเคชันจะส่งแบ็กเอนด์ค่าคงที่แบ็กเอนด์ของข้อความ JSON ที่ต้องถูกประมวลผลและการประมวลผลค่อนข้างซับซ้อน (การตรวจสอบการแปลงข้อมูลการกรองการรวมตัว ฯลฯ ):
- กรณี # 1: ข้อความแต่ละเฟรมของภาพยนตร์ นั่นคือหนึ่งข้อความ JSON ต่อเฟรมวิดีโอที่มีข้อมูลเฟรมและข้อมูลเมตาที่สนับสนุนบางส่วน
- กรณีที่ # 2: ข้อความเป็นข้อมูลอนุกรมเวลาบางทีหัวใจของใครบางคนเป็นหน้าที่ของเวลา ดังนั้นข้อความ # 1 จะถูกส่งแทน heartbeat ของฉันที่ t = 1, ข้อความ # 2 มี heartbeat ของฉันที่ t = 2, ฯลฯ
- กรณีที่ # 3: ข้อมูลมีความแตกต่างอย่างสิ้นเชิงและไม่เกี่ยวข้องตามเวลาหรือเป็นส่วนหนึ่งของ "data stream" บางทีเหตุการณ์การตรวจสอบ / ความปลอดภัยที่ถูกไล่ออกเนื่องจากผู้ใช้หลายร้อยคนนำทางปุ่มคลิกแอปพลิเคชันและดำเนินการ
จากการที่ Kafka / Kinesis ถูกเรียกเก็บเงินและความเข้าใจของฉันเกี่ยวกับสิ่งที่ "สตรีมข้อมูล" พวกเขาดูเหมือนจะเป็นผู้สมัครที่ชัดเจนสำหรับคดี # 1 (ข้อมูลวิดีโอที่ต่อเนื่องกัน) และ # 2 (ข้อมูลอนุกรมเวลาต่อเนื่อง) อย่างไรก็ตามฉันไม่เห็นเหตุผลใด ๆ ว่าทำไมนายหน้าข้อความแบบดั้งเดิมเช่น RabbitMQ ไม่สามารถจัดการอินพุตทั้งสองได้อย่างมีประสิทธิภาพเช่นกัน
และด้วย Case # 3 เราได้รับเฉพาะเหตุการณ์ที่เกิดขึ้นและเราต้องดำเนินการตอบสนองต่อเหตุการณ์นั้น ดังนั้นสำหรับฉันนี่พูดถึงการต้องการนายหน้าแบบดั้งเดิมเช่น RabbitMQ แต่ก็ไม่มีเหตุผลใดที่คุณจะไม่มี Kafka หรือ Kinesis จัดการกับการประมวลผลข้อมูลเหตุการณ์เช่นกัน
โดยพื้นฐานแล้วฉันกำลังหารูบริกที่ระบุว่า: ฉันมีข้อมูล X พร้อมคุณสมบัติ Y ฉันควรใช้สตรีมโปรเซสเซอร์เช่น Kafka / Kinesis เพื่อจัดการมัน หรือในทางกลับกันสิ่งหนึ่งที่ช่วยฉันพิจารณา: ฉันมีข้อมูล W พร้อมคุณสมบัติ Z ฉันควรใช้นายหน้าข้อความแบบดั้งเดิมเพื่อจัดการมัน
ดังนั้นฉันจึงถามว่า: ปัจจัยใดที่เกี่ยวกับข้อมูล (หรืออย่างอื่น) ช่วยคัดท้ายการตัดสินใจระหว่างสตรีมโปรเซสเซอร์หรือนายหน้าข้อความเนื่องจากทั้งสองสามารถจัดการข้อมูลสตรีมมิ่งและทั้งสองสามารถจัดการข้อมูลข้อความ (ไม่ใช่สตรีมมิ่ง)