想象以下场景:
我已通过 SNS 订阅了 Lambda 到 S3
PutObject
事件。此 S3 存储桶的数据生成器将在成功写入后将 _SUCCESS
文件写入分区,并且当检测到 _SUCCESS
文件并使用该数据时,我的 lambda 将触发下游作业。一切都好。
我最近加入了一个新的数据生成器,我还订阅了 S3
PutObject
事件 - 但是该生成器在完成写入后不会写入任何 _SUCCESS
文件。
是否有任何推荐的模式或方法可以有效且可靠地检测已完成的“完整写入”? (显然并不完美,因为可能存在大量边缘情况 - 首先寻找足够好的解决方案)
到目前为止,我的想法是尝试检测分区的
PutObject
事件中的峰值,并跟踪最后一个事件时间戳。一旦检测到活动已停止一段时间(最近的活动之后),下游进程将被触发以消耗新数据。
我该如何改进?
我在使用 DynamoDB 作为作业的元数据跟踪器方面取得了巨大成功,这也有助于对失败的作业发出警报。
但是您的数据生产者必须能够将元数据放在那里。作业成功后,只需更新 DynamoDB 中的作业项目,这将触发 Lambda 函数,使您能够继续下游处理。
Producer -> DynamoDB -> Streams -> Lambda