我希望有一个星火流SQS接收器,它只在成功地存储在S3上之后删除SQS消息。
为此,可以使用可靠接收器的语义实现自定义接收器。
store(multiple-records)调用一直到 --给定的记录--已在星火中存储和复制。
如果启用了预写日志,则从接收方接收的所有数据都将被写入到配置检查点目录中的预写日志中。。检查点目录可以指向S3。
在store(multiple-records)阻塞调用完成后,这些记录是否已经存储在检查点目录中(因此可以安全地从SQS中删除)?
发布于 2015-06-15 20:29:44
编辑:这在这次星火峰会的演讲中也有解释。
在启用了预写日志和检查点之后,store(multiple-records)调用将被阻塞,直到给定的记录被写入到预写日志为止。
Receiver.store(ArrayBuffer[T], ...)
ReceiverSupervisorImpl.pushArrayBuffer(ArrayBuffer[T], ...)
ReceiverSupervisorImpl.pushAndReportBlock(...)
WriteAheadLogBasedBlockHandler.storeBlock(...)这一实现将该块存储到块管理器中,以及预写日志中。它使用Scala并行地执行此操作,并且只在块存储在两个位置之后才返回。
https://stackoverflow.com/questions/30809975
复制相似问题