我想将物联网事件数据存储在Google云端存储中,这将用作我的数据湖。但是为每个事件执行PUT调用的成本太高,因此我想要追加到文件中,然后每小时进行一次PUT调用。如果我的消息处理服务中的节点出现故障,在不丢失数据的情况下执行此操作的方法是什么?
因为如果我的处理服务确认该消息,该消息将不再在Google Pub / Sub中,但也不在Google云端存储中,并且此时如果该处理节点发生故障,我将丢失数据
我想要的用法类似于这篇文章,讲述了在PUTing进入S3之前使用AWS Kinesis Firehose批处理消息,但即使是Kinesis Firehose的最大批处理间隔也只有900秒(或128MB): https://aws.amazon.com/blogs/big-data/persist-streaming-data-to-amazon-s3-using-amazon-kinesis-firehose-and-aws-lambda/
答案 0 :(得分:1)
如果您希望不断收到订阅中的邮件,则需要暂停搜索邮件,直到您成功将邮件写入Google云端存储。如果您没有使用Google Cloud Pub / Sub中的最新客户端库,则会在后台自动延长消息的截止日期。
或者,如果您在一段时间内每小时启动一次订阅者,该怎么办?每小时,您都可以启动订阅者,接收消息,将它们一起批处理,对云存储执行单个写入操作,以及确认所有消息。要确定何时停止当前批次的订阅者,您可以将其保留一段时间,或者可以监视num_undelivered_messages attribute via Stackdriver以确定何时消耗了大部分未完成的消息。