เหตุใดพายุจึงเล่นซ้ำ tuple จากพวยกาแทนที่จะลองอีกครั้งในส่วนประกอบที่ขัดข้อง

ฉันใช้ storm เพื่อประมวลผลปัญหาออนไลน์ แต่ฉันไม่เข้าใจว่าทำไม storm จึงเล่นซ้ำ tuple จาก spout การลองใหม่กับสิ่งที่ขัดข้องอาจมีประสิทธิภาพมากกว่าการเล่นซ้ำจากรูทใช่ไหม ใครสามารถช่วยฉันได้บ้าง? ขอบคุณ


person user1221244    schedule 27.02.2014    source แหล่งที่มา


คำตอบ (2)


การใช้พวยกาทั่วไปจะเล่นซ้ำเฉพาะสิ่งอันดับ FAILED เท่านั้น ตามที่อธิบายไว้ ที่นี่ สิ่งทูเพิลที่ปล่อยออกมาจากพวยกาสามารถกระตุ้นสิ่งทูเพิลอื่น ๆ อีกหลายพันตัว และพายุสร้างต้นไม้ ของทูเพิลตามนั้น ตอนนี้ทูเพิลถูกเรียกว่า "ประมวลผลอย่างสมบูรณ์" เมื่อทุกข้อความในแผนผังได้รับการประมวลผลแล้ว ในขณะที่ปล่อยพวยกาให้เพิ่ม message id ซึ่งใช้เพื่อระบุทูเพิลในระยะต่อมา สิ่งนี้เรียกว่าการยึดและสามารถทำได้ด้วยวิธีต่อไปนี้

    _collector.emit(new Values("field1", "field2", 3) , msgId);

ตอนนี้จากลิงค์ที่โพสต์ด้านบนมันบอกว่า

สิ่งอันดับจะถือว่าล้มเหลวเมื่อแผนผังข้อความไม่สามารถประมวลผลได้อย่างสมบูรณ์ ภายในระยะเวลาที่กำหนด การหมดเวลานี้สามารถกำหนดค่าได้บนพื้นฐานเฉพาะโทโพโลยีโดยใช้การกำหนดค่า Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS และมีค่าเริ่มต้นอยู่ที่ 30 วินาที

หาก tuple หมดเวลา Storm จะเรียกใช้เมธอด FAIL บนพวยกา และเช่นเดียวกันในกรณีที่สำเร็จ ก็จะเรียกใช้เมธอด ACK

ดังนั้น ณ จุดนี้ storm จะแจ้งให้คุณทราบว่าสิ่งใดคือ tuple ที่ล้มเหลวในการประมวลผล แต่ถ้าคุณดูในซอร์สโค้ด คุณจะเห็นว่าการใช้งานเมธอด fail นั้นว่างเปล่าในคลาส BaseRichSpout ดังนั้นคุณต้องแทนที่ วิธีการล้มเหลวของ BaseRichSpout เพื่อให้มีความสามารถในการเล่นซ้ำในแอปพลิเคชันของคุณ

person user2720864    schedule 27.02.2014
comment
คำตอบที่ยอดเยี่ยม โดยเฉพาะเคล็ดลับเกี่ยวกับการเอาชนะวิธีล้มเหลวของ BaseRichSpout ขอบคุณมาก. - person Lelouch Lamperouge; 21.11.2014

การเล่นซ้ำสิ่งอันดับที่ล้มเหลวดังกล่าวควรเป็นเพียงสัดส่วนเล็กน้อยของปริมาณการใช้ทูเพิลโดยรวม ดังนั้นประสิทธิภาพของนโยบายการเล่นซ้ำตั้งแต่เริ่มต้นอย่างง่ายนี้มักจะไม่เป็นปัญหา

การสนับสนุน "ขั้นตอนการเล่นซ้ำจากข้อผิดพลาด" จะนำมาซึ่งความซับซ้อนอย่างมาก เนื่องจากบางครั้งตำแหน่งของข้อผิดพลาดนั้นยากต่อการระบุ และจำเป็นต้องสนับสนุน "การเล่นซ้ำที่อื่น" ในกรณีที่โหนดคลัสเตอร์ที่เกิดข้อผิดพลาดอยู่ในขณะนี้ (หรือถาวร) ลง นอกจากนี้ยังจะทำให้การดำเนินการรับส่งข้อมูลทั้งหมดช้าลงซึ่งอาจไม่ได้รับการชดเชยด้วยประสิทธิภาพที่ได้รับจากการจัดการข้อผิดพลาด (ซึ่งถือว่าถูกทริกเกอร์น้อยมากเช่นกัน)

หากคุณคิดว่ากลยุทธ์การเล่นซ้ำตั้งแต่เริ่มต้นนี้จะส่งผลเสียต่อโทโพโลยีของคุณ ให้ลองแยกย่อยออกเป็นกลยุทธ์เล็กๆ หลายๆ รายการที่แยกจากกันด้วยระบบการเข้าคิวแบบถาวร เช่น Kafka

person Svend    schedule 27.02.2014
comment
สวัสดี Svend นั่นหมายความว่าการเล่นซ้ำระหว่าง bolt to bolt จะเป็นไปได้ก็ต่อเมื่อเรามีพวยกาที่เชื่อถือได้เท่านั้น เราไม่สามารถเลือกความน่าเชื่อถือระหว่างสลักเกลียวเพียงสองตัวและปิดการใช้งานที่เหลืออยู่ทั้งหมดได้ - person kartik; 04.05.2015
comment
ไม่ เราไม่สามารถเลือกความน่าเชื่อถือระหว่างสลักเกลียวสองตัวได้ เราต้องมีหัวฉีดที่เชื่อถือได้เพื่อที่จะมีความสามารถในการเล่นซ้ำในกรณีที่เกิดความล้มเหลว - person Rajat Garg; 03.02.2016