ข้อจำกัดความรับผิดชอบ : ฉันเป็นผู้ให้บริการ Apache Flink และสมาชิก PMC และคุ้นเคยกับการออกแบบระดับสูงของ Storm เท่านั้นไม่ใช่ภายใน
Apache Flink เป็นเฟรมเวิร์กสำหรับสตรีมแบบรวมและการประมวลผลแบตช์ รันไทม์ของ Flink รองรับทั้งสองโดเมนเนื่องจากการถ่ายโอนข้อมูลแบบไปป์ไลน์ระหว่างงานคู่ขนานซึ่งรวมถึงการสับเปลี่ยนแบบไปป์ไลน์ บันทึกจะถูกจัดส่งทันทีตั้งแต่งานผลิตจนถึงงานรับ (หลังจากรวบรวมในบัฟเฟอร์สำหรับการถ่ายโอนเครือข่าย) งานแบทช์สามารถเลือกดำเนินการได้โดยใช้การบล็อกการถ่ายโอนข้อมูล
Apache Spark เป็นเฟรมเวิร์กที่รองรับการประมวลผลแบบแบตช์และสตรีม batch API ของ Flink มีลักษณะค่อนข้างคล้ายกันและระบุกรณีการใช้งานที่คล้ายกันกับ Spark แต่แตกต่างกันในด้านใน สำหรับการสตรีมทั้งสองระบบจะใช้วิธีการที่แตกต่างกันมาก (มินิแบทช์เทียบกับสตรีมมิง) ซึ่งทำให้เหมาะสำหรับแอปพลิเคชันประเภทต่างๆ ฉันจะบอกว่าการเปรียบเทียบ Spark กับ Flink นั้นถูกต้องและมีประโยชน์อย่างไรก็ตาม Spark ไม่ใช่เครื่องมือประมวลผลสตรีมที่คล้ายกับ Flink มากที่สุด
มาถึงคำถามเดิม Apache Storm เป็นตัวประมวลผลสตรีมข้อมูลที่ไม่มีความสามารถแบบแบตช์ ในความเป็นจริงเครื่องยนต์แบบท่อภายในของ Flink มีลักษณะคล้ายกับ Storm เล็กน้อยกล่าวคือส่วนต่อประสานของงานคู่ขนานของ Flink นั้นคล้ายกับสลักเกลียวของ Storm Storm และ Flink มีเหมือนกันที่พวกเขาตั้งเป้าไว้ที่การประมวลผลสตรีมเวลาแฝงต่ำโดยการถ่ายโอนข้อมูลแบบไปป์ไลน์ อย่างไรก็ตาม Flink มี API ระดับสูงกว่าเมื่อเทียบกับ Storm แทนที่จะใช้ฟังก์ชันการทำงานของสลักเกลียวกับผู้อ่านและตัวรวบรวมตั้งแต่หนึ่งตัวขึ้นไป DataStream API ของ Flink มีฟังก์ชันต่างๆเช่น Map, GroupBy, Window และ Join ต้องใช้ฟังก์ชันนี้จำนวนมากด้วยตนเองเมื่อใช้ Storm ความแตกต่างอีกประการหนึ่งคือการประมวลผลความหมาย Storm รับประกันการประมวลผลอย่างน้อยหนึ่งครั้งในขณะที่ Flink ให้บริการเพียงครั้งเดียว การใช้งานที่ให้การรับประกันการประมวลผลเหล่านี้แตกต่างกันเล็กน้อย ในขณะที่ Storm ใช้การตอบรับระดับเรกคอร์ด Flink ใช้อัลกอริทึม Chandy-Lamport ที่แตกต่างกัน โดยสรุปแหล่งข้อมูลจะฉีดเครื่องหมายลงในสตรีมข้อมูลเป็นระยะ เมื่อใดก็ตามที่ผู้ปฏิบัติงานได้รับเครื่องหมายดังกล่าวจะตรวจสอบสถานะภายในของมัน เมื่อได้รับเครื่องหมายจากซิงก์ข้อมูลทั้งหมดเครื่องหมาย (และระเบียนทั้งหมดที่ได้รับการประมวลผลก่อนหน้านี้) จะถูกคอมมิต ในกรณีที่เกิดความล้มเหลวตัวดำเนินการซอร์สทั้งหมดจะถูกรีเซ็ตเป็นสถานะของพวกเขาเมื่อพวกเขาเห็นเครื่องหมายที่ยืนยันครั้งสุดท้ายและการประมวลผลจะดำเนินต่อไป วิธีการตรวจสอบเครื่องหมายนี้มีน้ำหนักเบากว่าการตอบรับระดับบันทึกของ Storm นี้ แหล่งข้อมูลจะฉีดเครื่องหมายลงในสตรีมข้อมูลเป็นระยะ เมื่อใดก็ตามที่ผู้ปฏิบัติงานได้รับเครื่องหมายดังกล่าวจะตรวจสอบสถานะภายในของมัน เมื่อได้รับเครื่องหมายจากซิงก์ข้อมูลทั้งหมดเครื่องหมาย (และระเบียนทั้งหมดที่ได้รับการประมวลผลก่อนหน้านี้) จะถูกคอมมิต ในกรณีที่เกิดความล้มเหลวตัวดำเนินการซอร์สทั้งหมดจะถูกรีเซ็ตเป็นสถานะของพวกเขาเมื่อพวกเขาเห็นเครื่องหมายที่ยืนยันครั้งสุดท้ายและดำเนินการต่อ วิธีการตรวจสอบเครื่องหมายนี้มีน้ำหนักเบากว่าการตอบรับระดับบันทึกของ Storm นี้ แหล่งข้อมูลจะฉีดเครื่องหมายลงในสตรีมข้อมูลเป็นระยะ เมื่อใดก็ตามที่ผู้ปฏิบัติงานได้รับเครื่องหมายดังกล่าวจะตรวจสอบสถานะภายในของมัน เมื่อได้รับเครื่องหมายจากซิงก์ข้อมูลทั้งหมดเครื่องหมาย (และระเบียนทั้งหมดที่ได้รับการประมวลผลก่อนหน้านี้) จะถูกคอมมิต ในกรณีที่เกิดความล้มเหลวตัวดำเนินการซอร์สทั้งหมดจะถูกรีเซ็ตเป็นสถานะของพวกเขาเมื่อพวกเขาเห็นเครื่องหมายที่ยืนยันครั้งสุดท้ายและดำเนินการต่อ วิธีการตรวจสอบเครื่องหมายนี้มีน้ำหนักเบากว่าการตอบรับระดับบันทึกของ Storm นี้ ตัวดำเนินการแหล่งที่มาทั้งหมดจะถูกรีเซ็ตเป็นสถานะเมื่อพวกเขาเห็นเครื่องหมายที่มุ่งมั่นสุดท้ายและการประมวลผลจะดำเนินต่อไป วิธีการตรวจสอบเครื่องหมายนี้มีน้ำหนักเบากว่าการตอบรับระดับบันทึกของ Storm นี้ ตัวดำเนินการแหล่งที่มาทั้งหมดจะถูกรีเซ็ตเป็นสถานะเมื่อพวกเขาเห็นเครื่องหมายที่มุ่งมั่นสุดท้ายและการประมวลผลจะดำเนินต่อไป วิธีการตรวจสอบเครื่องหมายนี้มีน้ำหนักเบากว่าการตอบรับระดับบันทึกของ Storm นี้ชุดสไลด์และการพูดคุยที่เกี่ยวข้องจะกล่าวถึงแนวทางการประมวลผลสตรีมมิ่งของ Flink รวมถึงการยอมรับข้อผิดพลาดการตรวจสอบและการจัดการสถานะ
Storm ยังเสนอ API ระดับสูงแบบครั้งเดียวที่เรียกว่า Trident อย่างไรก็ตามตรีศูลนั้นมีพื้นฐานมาจากมินิแบทช์และด้วยเหตุนี้จึงคล้ายกับ Spark มากกว่า Flink
เวลาแฝงที่ปรับได้ของ Flink หมายถึงวิธีที่ Flink ส่งบันทึกจากงานหนึ่งไปยังอีกงานหนึ่ง ฉันเคยพูดไปแล้วว่า Flink ใช้การถ่ายโอนข้อมูลแบบไปป์ไลน์และส่งต่อบันทึกทันทีที่มีการผลิต เพื่อประสิทธิภาพบันทึกเหล่านี้จะถูกรวบรวมในบัฟเฟอร์ซึ่งจะถูกส่งผ่านเครือข่ายเมื่อข้อมูลเต็มหรือถึงเกณฑ์เวลาที่กำหนด ขีด จำกัด นี้ควบคุมเวลาในการตอบสนองของเร็กคอร์ดเนื่องจากระบุระยะเวลาสูงสุดที่เร็กคอร์ดจะอยู่ในบัฟเฟอร์โดยไม่ถูกส่งไปยังงานถัดไป อย่างไรก็ตามไม่สามารถใช้เพื่อให้การรับประกันอย่างหนักเกี่ยวกับเวลาที่ใช้ในการบันทึกตั้งแต่การเข้าสู่การออกจากโปรแกรมเนื่องจากยังขึ้นอยู่กับเวลาในการประมวลผลภายในงานและจำนวนการถ่ายโอนเครือข่าย