用于Spark Streaming的可靠SQS接收器

时间:2015-06-12 18:32:11

标签: apache-spark

我希望有一个Spark Streaming SQS Receiver ,只有在成功存储在S3上之后才会删除SQS消息。

为此,可以使用可靠接收器的语义实现自定义接收器

store(multiple-records)调用blocks until已在Spark中存储和复制给定记录。

如果启用了预写日志,则从接收方收到的所有数据都会被写入into a write ahead log in the configuration checkpoint directory。检查点目录可以指向S3。

store(multiple-records)阻塞调用完成后,记录是否已存储在检查点目录中(因此可以安全地从SQS中删除)?

1 个答案:

答案 0 :(得分:1)

编辑:this Spark Summit presentation中也解释了这一点。

启用预写日志检查点后,store(multiple-records)调用将阻塞,直到给定的记录写入预写日志为止。

Receiver.store(ArrayBuffer[T], ...)
    ReceiverSupervisorImpl.pushArrayBuffer(ArrayBuffer[T], ...)
    ReceiverSupervisorImpl.pushAndReportBlock(...)
        WriteAheadLogBasedBlockHandler.storeBlock(...)

This implementation将块存储到块管理器以及写入日志中。它使用Scala Futures并行执行此操作,并且仅在块存储在两个位置后才返回。