AWS Kinesis การประมวลผลแลมด้าพร้อมกันพร้อมการรับประกันการสั่งซื้อ

Aug 19 2020

ฉันมีแลมด้าที่มีแหล่งที่มาของเหตุการณ์ที่ชี้ไปที่ Kinesis Stream Consumer (โดยมีเศษจำนวนหนึ่งโดยพลการ)

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

ตัวอย่างเช่นหากรายการในสตรีมมีคีย์พาร์ติชัน:

1,2,1,3,4,1,2,1

ถ้าเราใช้ลำดับการประมวลผลจากซ้ายไปขวา Lambda จะประมวลผลรายการด้วยคีย์พาร์ติชันแต่ละคีย์ 1,2, 3 และ 4 พร้อมกัน จากนั้นเมื่อเสร็จสิ้นรายการที่มีคีย์พาร์ติชันเฉพาะก็สามารถเริ่มประมวลผลรายการอื่นด้วยคีย์นั้นได้

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

ขอบคุณ

คำตอบ

numX Aug 20 2020 at 13:23

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

อ้างอิงจากคำถามที่พบบ่อยของ AWS http://aws.amazon.com/lambda/faqs/

ถาม: AWS Lambda ประมวลผลข้อมูลจากสตรีม Amazon Kinesis และ Amazon DynamoDB Streams อย่างไร

เร็กคอร์ด Amazon Kinesis และ DynamoDB Streams ที่ส่งไปยังฟังก์ชัน AWS Lambda ของคุณจะได้รับการต่ออนุกรมอย่างเคร่งครัดต่อชาร์ด ซึ่งหมายความว่าถ้าคุณใส่สองระเบียนในสะเก็ดเดียวกันแลมบ์ดารับประกันว่าฟังก์ชั่นแลมบ์ดาของคุณจะถูกเรียกประสบความสำเร็จกับระเบียนแรกก่อนที่มันจะถูกเรียกด้วยการบันทึกที่สอง หากการเรียกใช้สำหรับเร็กคอร์ดหนึ่งหมดเวลาถูกควบคุมหรือพบข้อผิดพลาดอื่น ๆ Lambda จะลองอีกครั้งจนกว่าจะสำเร็จ (หรือเร็กคอร์ดจะหมดอายุ 24 ชั่วโมง) ก่อนที่จะไปยังเร็กคอร์ดถัดไป ไม่รับประกันการเรียงลำดับของเรกคอร์ดในส่วนที่แตกต่างกันและการประมวลผลของแต่ละส่วนจะเกิดขึ้นพร้อมกัน