AWS Kinesis การประมวลผลแลมด้าพร้อมกันพร้อมการรับประกันการสั่งซื้อ
ฉันมีแลมด้าที่มีแหล่งที่มาของเหตุการณ์ที่ชี้ไปที่ Kinesis Stream Consumer (โดยมีเศษจำนวนหนึ่งโดยพลการ)
ฉันต้องการให้แน่ใจว่ารายการในสตรีมที่มี 'พาร์ติชันคีย์' เดียวกันนั้นได้รับการประมวลผลโดยแลมบ์ดาตามลำดับและไม่พร้อมกัน (สิ่งนี้ถูกใช้เป็นข้อมูลประจำตัวของวัตถุและฉันไม่ต้องการให้ Lambdas หลายตัวทำงานลอจิกบนวัตถุเดียวกันพร้อมกัน)
ตัวอย่างเช่นหากรายการในสตรีมมีคีย์พาร์ติชัน:
1,2,1,3,4,1,2,1
ถ้าเราใช้ลำดับการประมวลผลจากซ้ายไปขวา Lambda จะประมวลผลรายการด้วยคีย์พาร์ติชันแต่ละคีย์ 1,2, 3 และ 4 พร้อมกัน จากนั้นเมื่อเสร็จสิ้นรายการที่มีคีย์พาร์ติชันเฉพาะก็สามารถเริ่มประมวลผลรายการอื่นด้วยคีย์นั้นได้
วิธีนี้ทำได้หรือไม่โดยไม่ต้องใช้ตัวล็อคแบบกระจายซึ่งจะทำให้การใช้ Lambda ไม่มีประสิทธิภาพ?
ขอบคุณ
คำตอบ
ดูเหมือนว่าฉันกำลังแก้ปัญหาในทางที่ผิด แลมด้ารับประกันว่าภายในชาร์ดอินสแตนซ์ Lambda จะถูกเรียกใช้ทีละชุด ดังนั้นจึงไม่จำเป็นต้องมีการล็อกแบบกระจายเนื่องจากอย่างเลวร้ายที่สุดจะมีหลายระเบียนที่เป็นของเอนทิตีเดียวกันในชุดเดียวกันและสามารถประมวลผลตามลำดับได้ในหน่วยความจำภายในฟังก์ชัน Lambda เอง
อ้างอิงจากคำถามที่พบบ่อยของ AWS http://aws.amazon.com/lambda/faqs/
ถาม: AWS Lambda ประมวลผลข้อมูลจากสตรีม Amazon Kinesis และ Amazon DynamoDB Streams อย่างไร
เร็กคอร์ด Amazon Kinesis และ DynamoDB Streams ที่ส่งไปยังฟังก์ชัน AWS Lambda ของคุณจะได้รับการต่ออนุกรมอย่างเคร่งครัดต่อชาร์ด ซึ่งหมายความว่าถ้าคุณใส่สองระเบียนในสะเก็ดเดียวกันแลมบ์ดารับประกันว่าฟังก์ชั่นแลมบ์ดาของคุณจะถูกเรียกประสบความสำเร็จกับระเบียนแรกก่อนที่มันจะถูกเรียกด้วยการบันทึกที่สอง หากการเรียกใช้สำหรับเร็กคอร์ดหนึ่งหมดเวลาถูกควบคุมหรือพบข้อผิดพลาดอื่น ๆ Lambda จะลองอีกครั้งจนกว่าจะสำเร็จ (หรือเร็กคอร์ดจะหมดอายุ 24 ชั่วโมง) ก่อนที่จะไปยังเร็กคอร์ดถัดไป ไม่รับประกันการเรียงลำดับของเรกคอร์ดในส่วนที่แตกต่างกันและการประมวลผลของแต่ละส่วนจะเกิดขึ้นพร้อมกัน